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

T-SQL (ภาษาคิวรีธุรกรรมเชิงโครงสร้าง) เป็นส่วนเสริมของฟังก์ชัน SQL ที่รองรับโดย Sybase ASE และ Microsoft SQL Server อย่าใช้แท็กนี้สำหรับการสืบค้นที่เกี่ยวข้องกับ MySQL, PostgreSql, Oracle (Pl / SQL) โปรดทราบว่ารหัส SQL ที่กำลังเขียนโดยใช้ LINQ จะไม่เป็นส่วนหนึ่งของแท็กนี้ด้วย แท็กนี้สร้างขึ้นโดยเฉพาะสำหรับการเขียนโปรแกรม SQL ขั้นสูงโดยใช้ Microsoft SQL Server

1
การประกาศข้อ จำกัด เริ่มต้นเมื่อสร้างตาราง
ฉันกำลังสร้างตารางใหม่ใน Microsoft SQL Server 2000 โดยเขียนโค้ดแทนการใช้ GUI ฉันกำลังพยายามเรียนรู้วิธีการทำ "วิธีการด้วยตนเอง" นี่คือรหัสที่ฉันใช้จริงและใช้งานได้ดี: CREATE TABLE "attachments" ( "attachment_id" INT NOT NULL, "load_date" SMALLDATETIME NOT NULL, "user" VARCHAR(25) NOT NULL, "file_name" VARCHAR(50) NOT NULL, CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"), CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"), CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE()) ) …

9
สร้างสตริงแฮช MD5 ด้วย T-SQL
มีวิธีสร้างสตริง MD5 Hash ประเภท varchar (32) โดยไม่ใช้ fn_varbintohexstr หรือไม่ SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32) ดังนั้นจึงสามารถใช้ในมุมมองที่มีการกำหนดตารางเวลา

16
การลบเลขศูนย์นำหน้าออกจากฟิลด์ในคำสั่ง SQL
ฉันกำลังทำงานกับแบบสอบถาม SQL ที่อ่านจากฐานข้อมูล SQLServer เพื่อสร้างไฟล์แตกไฟล์ ข้อกำหนดประการหนึ่งในการลบศูนย์นำหน้าออกจากฟิลด์ใดฟิลด์หนึ่งซึ่งเป็นVARCHAR(10)ฟิลด์ธรรมดา ตัวอย่างเช่นหากฟิลด์มี "00001A" คำสั่ง SELECT จำเป็นต้องส่งคืนข้อมูลเป็น "1A" มีวิธีใน SQL ในการลบศูนย์นำหน้าด้วยวิธีนี้หรือไม่? ฉันรู้ว่ามีRTRIMฟังก์ชัน แต่ดูเหมือนว่าจะลบช่องว่างเท่านั้น
100 sql  sql-server  tsql 

5
วิธีเลือกเฉพาะแถวแรกสำหรับแต่ละค่าที่ไม่ซ้ำกันของคอลัมน์
สมมติว่าฉันมีตารางที่อยู่ลูกค้า: CName | AddressLine ------------------------------- John Smith | 123 Nowheresville Jane Doe | 456 Evergreen Terrace John Smith | 999 Somewhereelse Joe Bloggs | 1 Second Ave ในตารางลูกค้ารายหนึ่งเช่น John Smith สามารถมีที่อยู่ได้หลายรายการ ฉันต้องการคำค้นหาที่เลือกสำหรับตารางนี้เพื่อส่งคืนเฉพาะแถวแรกที่พบซึ่งมีรายการที่ซ้ำกันใน 'CName' สำหรับตารางนี้ควรส่งคืนแถวทั้งหมดยกเว้นแถวที่ 3 (หรือ 1 - ที่อยู่ใดก็ได้ในสองรายการนั้นใช้ได้ แต่สามารถส่งคืนได้เพียงรายการเดียว) มีคำหลักที่ฉันสามารถเพิ่มลงในแบบสอบถาม SELECT เพื่อกรองตามว่าเซิร์ฟเวอร์เคยเห็นค่าคอลัมน์มาก่อนหรือไม่
100 sql  sql-server  tsql  select  unique 

8
TSQL - วิธีใช้ GO ภายใน BEGIN .. END block?
ฉันกำลังสร้างสคริปต์สำหรับย้ายการเปลี่ยนแปลงโดยอัตโนมัติจากฐานข้อมูลการพัฒนาหลายฐานข้อมูลไปยังการจัดเตรียม / การผลิต โดยทั่วไปจะใช้สคริปต์การเปลี่ยนแปลงจำนวนมากและรวมเข้าด้วยกันเป็นสคริปต์เดียวโดยรวมแต่ละสคริปต์ไว้ในIF whatever BEGIN ... ENDคำสั่ง อย่างไรก็ตามสคริปต์บางส่วนต้องการGOคำสั่งเพื่อให้ตัวแยกวิเคราะห์ SQL รู้เกี่ยวกับคอลัมน์ใหม่หลังจากสร้างแล้ว ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN" UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever อย่างไรก็ตามเมื่อฉันห่อสิ่งนั้นไว้ในIFบล็อก: IF whatever BEGIN ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL …

3
แทนที่ค่า Null เริ่มต้นที่ส่งกลับจากการเข้าร่วมด้านนอกด้านซ้าย
ฉันมีแบบสอบถาม Microsoft SQL Server 2008 ที่ส่งคืนข้อมูลจากตารางสามตารางโดยใช้การรวมภายนอกด้านซ้าย หลายครั้งไม่มีข้อมูลในตารางที่สองและสามดังนั้นฉันจึงได้ค่าว่างซึ่งฉันคิดว่าเป็นค่าเริ่มต้นสำหรับการรวมภายนอกด้านซ้าย มีวิธีแทนที่ค่าเริ่มต้นในคำสั่ง select หรือไม่? ฉันมีวิธีแก้ปัญหาที่ฉันสามารถเลือกเป็นตัวแปรตารางได้ แต่รู้สึกสกปรกเล็กน้อย SELECT iar.Description, iai.Quantity, iai.Quantity * rpl.RegularPrice as 'Retail', iar.Compliance FROM InventoryAdjustmentReason iar LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = …

9
แบบสอบถาม SQL ใดเร็วกว่า กรองเกณฑ์การเข้าร่วมหรือ Where clause?
เปรียบเทียบ 2 คำค้นหานี้ เร็วกว่าที่จะใส่ตัวกรองในเกณฑ์การเข้าร่วมหรือในส่วนWHEREคำสั่ง ฉันรู้สึกเสมอว่ามันเร็วกว่าเกณฑ์การเข้าร่วมเพราะมันจะลดผลลัพธ์ที่ตั้งไว้ในช่วงเวลาที่เร็วที่สุดเท่าที่จะเป็นไปได้ แต่ฉันไม่รู้แน่ชัด ฉันจะสร้างแบบทดสอบเพื่อดู แต่ฉันก็อยากได้ความคิดเห็นที่จะอ่านได้ชัดเจนกว่าเช่นกัน แบบสอบถาม 1 SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1 /* <-- Filter here? */ แบบสอบถาม 2 SELECT * FROM TableA a INNER JOIN TableXRef …


2
PAGEIOLATCH_SH wait type ใน SQL Server คืออะไร?
ฉันมีคำถามที่ต้องใช้เวลานานในระหว่างการทำธุรกรรม เมื่อผมได้รับของกระบวนการที่มันเป็นwait_typePAGEIOLATCH_SH ประเภทการรอนี้หมายถึงอะไรและจะแก้ไขได้อย่างไร

6
ฟังก์ชันการรวมในแบบสอบถามการอัปเดต SQL?
ฉันกำลังพยายามตั้งค่าในตารางหนึ่งเป็นผลรวมของค่าในตารางอื่น บางสิ่งตามบรรทัดเหล่านี้: UPDATE table1 SET field1 = SUM(table2.field2) FROM table1 INNER JOIN table2 ON table1.field3 = table2.field3 GROUP BY table1.field3 แน่นอนว่านี้ยืนก็จะไม่ทำงาน - SETไม่สนับสนุนและไม่สนับสนุน SUMGROUP BY ฉันควรจะรู้ แต่ใจของฉันมันว่างเปล่า ผมทำอะไรผิดหรือเปล่า?
98 sql  sql-server  tsql 

7
ไม่สามารถใช้เพรดิเคต CONTAINS หรือ FREETEXT บนตารางหรือมุมมองที่จัดทำดัชนีได้เนื่องจากไม่ได้จัดทำดัชนีข้อความแบบเต็ม
ฉันได้รับข้อผิดพลาดต่อไปนี้ในฐานข้อมูล SQL Server 2008 R2 ของฉัน: ไม่สามารถใช้CONTAINSหรือFREETEXTกริยาบนโต๊ะหรือมุมมองที่จัดทำดัชนี 'tblArmy' เพราะมันไม่ได้ข้อความเต็มรูปแบบการจัดทำดัชนี

14
รับวันแรกของสัปดาห์ใน SQL Server
ฉันพยายามจัดกลุ่มบันทึกตามสัปดาห์โดยจัดเก็บวันที่รวมเป็นวันแรกของสัปดาห์ อย่างไรก็ตามเทคนิคมาตรฐานที่ฉันใช้ในการปัดเศษวันที่ไม่ทำงานอย่างถูกต้องในสัปดาห์ (แม้ว่าจะใช้เป็นวันเดือนปีไตรมาสและกรอบเวลาอื่น ๆ ที่ฉันใช้กับ) นี่คือ SQL: select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), 0); ผลตอบแทนนี้2011-08-22 00:00:00.000ซึ่งเป็นวันจันทร์ไม่ใช่วันอาทิตย์ เลือก@@datefirstผลตอบแทน7ซึ่งเป็นรหัสสำหรับวันอาทิตย์ดังนั้นเซิร์ฟเวอร์จึงตั้งค่าได้อย่างถูกต้องเท่าที่ฉันทราบ ฉันสามารถข้ามสิ่งนี้ได้อย่างง่ายดายโดยเปลี่ยนรหัสด้านบนเป็น: select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), -1); แต่การที่ฉันต้องทำข้อยกเว้นนั้นทำให้ฉันไม่สบายใจเล็กน้อย นอกจากนี้ขออภัยหากเป็นคำถามที่ซ้ำกัน ฉันพบคำถามที่เกี่ยวข้อง แต่ไม่มีคำถามที่กล่าวถึงประเด็นนี้โดยเฉพาะ

13
ส่งคืนค่าหากไม่พบแถวใน Microsoft tSQL
ใช้SQL เวอร์ชันMicrosoftนี่คือแบบสอบถามง่ายๆของฉัน หากฉันสอบถามบันทึกที่ไม่มีอยู่ฉันจะไม่ได้รับสิ่งใดกลับคืนมา ฉันต้องการให้ส่งคืนเท็จ (0) ในสถานการณ์นั้น กำลังมองหาวิธีการที่ง่ายที่สุดในการไม่บันทึกข้อมูล SELECT CASE WHEN S.Id IS NOT NULL AND S.Status = 1 AND (S.WebUserId = @WebUserId OR S.AllowUploads = 1) THEN 1 ELSE 0 END AS [Value] FROM Sites S WHERE S.Id = @SiteId
97 tsql 

3
การจัดเก็บ DateTime (UTC) เทียบกับการจัดเก็บ DateTimeOffset
ฉันมักจะมี "ตัวสกัดกั้น" ที่อยู่ก่อนที่จะอ่าน / เขียนจาก / ไปยังฐานข้อมูลทำการแปลง DateTime (จากเวลา UTC เป็นเวลาท้องถิ่นและจากเวลาท้องถิ่นเป็น UTC) ดังนั้นฉันจึงสามารถใช้DateTime.Now(อนุพันธ์และการเปรียบเทียบ) ได้ทั่วทั้งระบบโดยไม่ต้องกังวล เกี่ยวกับเขตเวลา เกี่ยวกับการทำให้เป็นอนุกรมและการย้ายข้อมูลระหว่างคอมพิวเตอร์ไม่จำเป็นต้องกังวลเนื่องจากวันที่และเวลาเป็น UTC เสมอ ฉันควรจัดเก็บวันที่ของฉันต่อไป (SQL 2008 - วันที่และเวลา) ในรูปแบบ UTC หรือควรเก็บไว้โดยใช้DateTimeOffset(SQL 2008 - datetimeoffset) วันที่ UTC ในฐานข้อมูล (ประเภทวันที่และเวลา) ใช้งานได้และเป็นที่รู้จักมานานแล้วทำไมต้องเปลี่ยน ข้อดีคืออะไร? ฉันได้ดูบทความเช่นนี้แล้ว แต่ฉันไม่มั่นใจ 100% ความคิดใด ๆ ?

7
ค้นหาค่าหนึ่งในคอลัมน์ของตารางใดก็ได้ภายในฐานข้อมูล
มีวิธีค้นหาค่าหนึ่งค่า (ในกรณีของฉันคือ UID ของประเภทchar(64)) ภายในคอลัมน์ใด ๆ ของตารางใด ๆ ภายในฐานข้อมูล MS SQL Server เดียวหรือไม่ ฉันนั่งอยู่หน้าฐานข้อมูลขนาดใหญ่โดยไม่รู้ว่าตารางจะต้องเชื่อมโยงกันอย่างไร หากต้องการทราบว่าฉันต้องการแสดงรายการตารางทั้งหมดและมีคอลัมน์ที่มีค่าที่แน่นอนในแถวใดก็ได้ เป็นไปได้หรือไม่ วิธีหนึ่งอาจเป็นเพียงการถ่ายโอนฐานข้อมูลทั้งหมดลงในไฟล์ข้อความและใช้โปรแกรมแก้ไขข้อความใด ๆ เพื่อค้นหาค่า - แต่นี่จะเป็นความเจ็บปวดอย่างแท้จริงหากฐานข้อมูลมีขนาดใหญ่เกินไป
96 tsql 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.