คำถามติดแท็ก syntax

ชุดของกฎที่กำหนดการรวมกันของสัญลักษณ์ที่พิจารณาว่ามีโครงสร้างที่ถูกต้องสำหรับภาษานั้น

2
วิธีการเข้าร่วมตารางที่มีฟังก์ชั่นมูลค่าตาราง?
ฉันมีฟังก์ชั่นที่ผู้ใช้กำหนด: create function ut_FooFunc(@fooID bigint, @anotherParam tinyint) returns @tbl Table (Field1 int, Field2 varchar(100)) as begin -- blah blah end ตอนนี้ฉันต้องการเข้าร่วมในตารางอื่นเช่น: select f.ID, f.Desc, u.Field1, u.Field2 from Foo f join ut_FooFunc(f.ID, 1) u -- doesn't work where f.SomeCriterion = 1 ในคำอื่น ๆ สำหรับทุกFooระเบียนที่SomeCriterion1 ผมต้องการที่จะเห็นFoo IDและDescควบคู่ไปกับค่าของField1และField2ที่กลับมาจากการสำหรับการป้อนข้อมูลของut_FooFuncFoo.ID ไวยากรณ์ที่จะทำคืออะไร?

3
ความแตกต่างของประสิทธิภาพสำหรับ COALESCE เทียบกับ ISNULL หรือไม่
ฉันเคยเห็นผู้คนจำนวนมากใช้ฟังก์ชัน COALESCE แทน ISNULL จากการค้นหาทางอินเทอร์เน็ตฉันพบว่า COALESCE เป็นมาตรฐาน ANSI ดังนั้นจึงมีข้อได้เปรียบที่เรารู้ว่าจะเกิดอะไรขึ้นเมื่อใช้งาน อย่างไรก็ตาม ISNULL อ่านง่ายขึ้นเนื่องจากดูเหมือนชัดเจนยิ่งขึ้นว่ากำลังทำอะไรอยู่ ฉันยังตระหนักว่า ISNULL นั้นค่อนข้างยุ่งยากเนื่องจากมันทำงานต่างกันในเซิร์ฟเวอร์ฐานข้อมูลที่แตกต่างกัน จากทั้งหมดนี้ในใจของฉันทำให้สไตล์และมาตรฐานเป็นที่ชื่นชอบ มีรูปแบบที่เป็นอัตนัยมีเหตุผลใดบ้างที่จะใช้ COALESCE บน ISNULL (หรือในทางกลับกัน) มีข้อได้เปรียบด้านประสิทธิภาพการทำงานของอีกตัวหนึ่งหรือไม่?

6
วิธีสร้างตารางชั่วคราวโดยใช้ VALUES ใน PostgreSQL
ฉันกำลังเรียนรู้ PostgreSQL และพยายามหาวิธีสร้างตารางชั่วคราวหรือWITHประกาศที่สามารถใช้แทนตารางปกติเพื่อจุดประสงค์ในการดีบั๊ก ฉันดูเอกสารสำหรับCREATE TABLEและมันบอกว่าVALUESสามารถใช้เป็นแบบสอบถาม แต่ไม่ได้ยกตัวอย่าง เอกสารสำหรับVALUESส่วนเชื่อมโยงนั้นไม่มีตัวอย่างหรือไม่? ดังนั้นฉันจึงเขียนแบบทดสอบง่ายๆดังนี้: DROP TABLE IF EXISTS lookup; CREATE TEMP TABLE lookup ( key integer, val numeric ) AS VALUES (0,-99999), (1,100); แต่ PostgreSQL (9.3) กำลังบ่นเกี่ยวกับ ข้อผิดพลาดทางไวยากรณ์ที่หรือใกล้ "AS" คำถามของฉันคือ: ฉันจะแก้ไขข้อความข้างต้นได้อย่างไร ฉันจะสามารถปรับตัวเข้ากับมันเพื่อนำมาใช้ในWITH block? ขอบคุณล่วงหน้า.

4
MySQL ตั้งค่าเวลา UTC เป็นเวลาเริ่มต้น
ฉันจะตั้งค่าคอลัมน์เวลาประทับที่ค่าเริ่มต้นคือเวลา UTC ปัจจุบันได้อย่างไร MySQL ใช้UTC_TIMESTAMP()ฟังก์ชั่นสำหรับการประทับเวลา UTC: mysql> SELECT UTC_TIMESTAMP(); +---------------------+ | UTC_TIMESTAMP() | +---------------------+ | 2012-07-01 11:36:35 | +---------------------+ 1 row in set (0.00 sec) ดังนั้นฉันได้ลอง: CREATE TABLE `blah` ( `creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP, ... และรูปแบบอื่น ๆ เช่นUTC_TIMESTAMP()แต่ไม่ประสบความสำเร็จ

6
ทำไมเราใช้ Group by 1 และ Group by 1,2,3 ในการสืบค้น SQL?
ในแบบสอบถาม SQL เราจะใช้กลุ่มตามข้อเพื่อใช้ฟังก์ชั่นรวม แต่วัตถุประสงค์เบื้องหลังการใช้ค่าตัวเลขแทนชื่อคอลัมน์กับ Group by clause คืออะไร ตัวอย่างเช่น: จัดกลุ่มตาม 1
26 mysql  plsql  group-by  syntax 

1
(NOLOCK) กับ NOLOCK
ฉันกำลังตรวจสอบการบล็อกบางอย่างเมื่อฉันเห็นข้อความค้นหาที่มีลักษณะดังนี้: SELECT SomeField FROM SomeTable NOLOCK ฉันเห็นNOLOCKและอยากรู้ว่ามันจะบล็อกข้อความค้นหาอื่น ๆ ได้อย่างไรในกรณีDELETEนี้ ฉันลองดูที่ล็อคโดยใช้sp_lockและนี่คือสิ่งที่ฉันเห็น: DB S GRANT TAB IS GRANT PAG S GRANT ตอนนี้ความเข้าใจของฉันคือที่NOLOCKควรจะใช้ล็อค Schema-Stability เท่านั้นทำไมมันจึงคว้าล็อค IS? ความอยากรู้ของฉันป่องๆ ฉันดู BOL และเห็นว่ามีสองวิธีในการใช้WITH (NOLOCK)และเลิกใช้แล้ว(NOLOCK)ดังนั้นฉันจึงตัดสินใจลองใช้ ฉันเรียกใช้แบบสอบถามต่อไปนี้ตามด้วยการเรียกใช้sp_lock: SELECT SomeField FROM SomeTable WITH (NOLOCK) DB S GRANT TAB Sch-S GRANT SELECT SomeField FROM SomeTable (NOLOCK) DB S GRANT TAB …

2
ฉันจะประกาศและใช้ตัวแปรใน Oracle ได้อย่างไร
ทักษะหลักของฉันอยู่กับ SQL Server แต่ฉันถูกขอให้ทำการปรับแต่งแบบสอบถามของ Oracle ฉันได้เขียน SQL ต่อไปนี้: declare @startDate int select @startDate = 20110501 และฉันได้รับข้อผิดพลาดนี้: declare @startDate int select @startDate = 20110501 Error at line 1 ORA-06550: line 1, column 9: PLS-00103: Encountered the symbol "@" when expecting one of the following: begin function package pragma procedure subtype type …

2
กรณีการเข้าร่วม Oracle ภายนอกที่แปลกประหลาด
ฉันได้เห็นสิ่งต่อไปนี้ในแบบสอบถามที่ควรจะถูกย้ายจาก Oracle outer join syntax ไปเป็น SQL standard outer join syntax: SELECT ... FROM A, B, C, D, E WHERE A.A_ID = B.A_ID AND B.B_ID = C.A_ID(+) AND B.B_KEY = C.B_KEY(+) AND C.C_ID = D.C_ID(+) AND B.A_ID = E.A_ID(+) AND B.B_KEY = E.B_KEY(+) AND 'CONSTANT' = C.X_ID(+) ตอนนี้การแปลไวยากรณ์การรวมภายนอกนั้นเป็นกระบวนการทางกล แต่บรรทัดสุดท้ายนั่นทำให้ฉันงุนงง มันหมายความว่าอะไร? …
16 oracle  join  syntax 

2
ทำไม CTE ควรเริ่มต้นด้วยเซมิโคลอน
ฉันแค่ดูโพสต์ในStackOverflowที่ Aaron Bertrand เสนอให้ใช้ CTE แทนตารางตัวเลขซึ่งเป็นวิธีที่ยอดเยี่ยมในการปฏิบัติงานในมือ คำถามของฉันคือทำไมบรรทัดแรกของ CTE เริ่มต้นด้วยเซมิโคลอน ;WITH n AS (SELECT TOP (10000) n FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 ) AS x ORDER BY n ) SELECT n FROM n ORDER BY n; -- look …
14 sql-server  t-sql  cte  syntax 

1
สิ่งที่ทำให้ SQL Server แลกเปลี่ยนชื่อวัตถุสำหรับสตริงที่ส่งผ่านไปยังโพรซีเดอร์ระบบ
สิ่งที่ทำให้มันถูกต้องตามกฎหมายที่จะส่งชื่อวัตถุที่จะขั้นตอนของระบบที่เก็บไว้sp_helptext? กลไกใดที่แปลงชื่อวัตถุเป็นสตริง เช่น -- works sp_helptext myproc sp_helptext [myproc] sp_helptext [dbo.myproc] -- and behaves the same as a string sp_helptext 'myproc' sp_helptext 'dbo.myproc' -- does not work sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.' -- an additional case that does not work. …

2
วิธีที่ง่ายที่สุดในการย้ายข้อมูลจาก Oracle ไปยัง SQL Server คืออะไร
หนึ่งในผลิตภัณฑ์ของเรารองรับทั้ง Oracle และ SQL Server เป็นแบ็กเอนด์ฐานข้อมูล เรามีลูกค้าที่ต้องการเปลี่ยนจากแบ็กเอนด์ Oracle เป็น Microsoft SQL Server ซึ่งไม่ใช่การเปลี่ยนแปลงตามปกติสำหรับเรา วิธีที่ง่ายที่สุดในการรับข้อมูลทั้งหมดจาก Oracle Schema ทั้งหมดไปยังฐานข้อมูล SQL Server คืออะไร สคีมามีเพียงตารางเก่าธรรมดาและไม่มีอะไรแฟนซี อาจมีหนึ่งหรือสองกระบวนงานที่เก็บไว้ซึ่งเราจะไม่มีปัญหาในการโยกย้ายด้วยมือ ฉันสามารถใช้ SQLDeveloper ของ Oracle เพื่อส่งออกข้อมูลตารางCREATEและINSERTคำสั่ง แต่สิ่งเหล่านี้จะไม่ตรงกับไวยากรณ์ที่ใช้บน SQL Server และฉันไม่ได้รอที่จะแก้ไขข้อผิดพลาดทางไวยากรณ์ด้วยตนเอง

1
เราสามารถใส่เครื่องหมายเท่ากับ (=) หลังจากฟังก์ชั่นรวมใน Transact-SQL ได้หรือไม่?
ฉันได้พบสคริปต์เช่นนี้: set @sum = sum = (case when somecol1 is null then DATEDIFF(d,[somecol2],somecol3) else 0 end) ฉันไม่เข้าใจความหมายของเครื่องหมายเท่ากับ (=) หลังจากรวมคำหลักที่สอง เมื่อฉันเรียกใช้แบบสอบถามจะไม่แสดงข้อผิดพลาดใด ๆ ทั้งที่มีเครื่องหมายเท่ากับและไม่มี sumฉันต้องการที่จะทราบวัตถุประสงค์ของการวางเครื่องหมายเท่ากับหลังจากคำหลัก นั่นเป็นความผิดพลาดหรือไม่? ขอบคุณ

1
ไวยากรณ์ของ INNER JOIN ซ้อนอยู่ภายใน OUTER JOIN เปรียบเทียบกับผลการสืบค้น
TLDR; หากคุณดูที่แผนปฏิบัติการ 2 แบบมีคำตอบที่ง่ายกว่ากันหรือไม่? ฉันไม่ได้ตั้งใจสร้างดัชนีเพื่อให้ง่ายต่อการดูว่าเกิดอะไรขึ้น การติดตามคำถามก่อนหน้าของฉันที่เราพบความแตกต่างของประสิทธิภาพการค้นหาระหว่างสไตล์การเข้าร่วมที่แตกต่างกัน (เช่นซ้อนกับดั้งเดิม) ฉันได้ตระหนักว่าไวยากรณ์ที่ซ้อนกันยังปรับเปลี่ยนพฤติกรรมของแบบสอบถาม พิจารณา 2 แบบสอบถามต่อไปนี้ SELECT a.*, m.*, n.* FROM dbo.Autos a LEFT JOIN dbo.Models m JOIN dbo.Manufacturers n -- <-- Nested INNER JOIN ON n.ManufacturerID = m.ManufacturerID ON m.ModelID = a.ModelID สิ่งนี้ไม่จำเป็นต้องทำให้ผู้ผลิตเข้าร่วมเพื่อรวมแถว auto กับ ModelID ที่ไม่ได้อยู่ในตาราง Models การใช้ไวยากรณ์แบบดั้งเดิมเราต้องเปลี่ยนการเข้าร่วมเป็นผู้ผลิตเป็นการรวมภายนอกเช่น ... แต่สิ่งนี้เปลี่ยนแผนแบบสอบถาม SELECT a.*, m.*, …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.