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

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

11
เข้าร่วมซ้ายซ้ายจะส่งกลับระเบียนมากกว่าที่มีอยู่ในตารางด้านซ้ายได้อย่างไร
ฉันมีการเข้าร่วมด้านซ้ายด้านนอกขั้นพื้นฐานมากเพื่อส่งคืนผลลัพธ์ทั้งหมดจากตารางด้านซ้ายและข้อมูลเพิ่มเติมจากตารางที่ใหญ่กว่ามาก ตารางด้านซ้ายมีระเบียน 4935 แต่เมื่อฉันออกไปด้านนอกเข้าร่วมกับตารางเพิ่มเติมการนับระเบียนนั้นใหญ่กว่ามาก เท่าที่ฉันทราบมันเป็นข่าวประเสริฐแน่นอนที่ซ้ายด้านนอกเข้าร่วมจะส่งกลับระเบียนทั้งหมดจากตารางด้านซ้ายด้วยระเบียนที่ตรงกันจากตารางด้านขวาและค่า null สำหรับแถวใด ๆ ที่ไม่สามารถจับคู่ได้ดังนั้นฉันเข้าใจว่าควร เป็นไปไม่ได้ที่จะส่งคืนแถวมากกว่าที่มีอยู่ในตารางด้านซ้าย แต่มันเกิดขึ้นเหมือนกันทั้งหมด! แบบสอบถาม SQL ดังนี้: SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID FROM SUSP.Susp_Visits LEFT OUTER JOIN DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum บางทีฉันได้ทำผิดพลาดในไวยากรณ์หรือความเข้าใจของฉันออกจากซ้ายเข้าร่วมไม่สมบูรณ์หวังว่าบางคนสามารถอธิบายว่าสิ่งนี้อาจเกิดขึ้นได้อย่างไร ป.ล. ขอบคุณสำหรับคำตอบที่ดีความเข้าใจของฉันในการเข้าร่วมด้านซ้ายด้านนอกตอนนี้ดีขึ้นมากใคร ๆ ก็สามารถแนะนำวิธีแก้ไขแบบสอบถามนี้เพื่อที่ฉันจะได้รับบันทึกกลับมาเท่าที่มีอยู่ในตารางด้านซ้าย แบบสอบถามนี้เป็นการสร้างรายงานอย่างหมดจดและการจับคู่ที่ซ้ำกันก็ทำให้เกิดความสับสน / Postscript

5
วิธีตรวจสอบการมีอยู่ของชนิดตารางที่ผู้ใช้กำหนดใน SQL Server 2008
ฉันมีประเภทตารางที่ผู้ใช้กำหนด ฉันต้องการตรวจสอบว่ามีอยู่จริงก่อนทำการแก้ไขในแพทช์โดยใช้OBJECT_ID(name, type)ฟังก์ชั่น สิ่งtypeที่ควรจะส่งผ่านจากการแจงนับสำหรับประเภทตารางที่ผู้ใช้กำหนด? N'U' เช่นสำหรับตารางที่ผู้ใช้กำหนดไม่ทำงานเช่น IF OBJECT_ID(N'MyType', N'U') IS NOT NULL

7
SQL เข้าร่วม vs ประสิทธิภาพ?
ฉันมีกรณีที่ใช้ JOIN หรือ IN จะให้ผลลัพธ์ที่ถูกต้อง ... ซึ่งโดยทั่วไปมีประสิทธิภาพที่ดีขึ้นและทำไม เท่าไหร่ก็ไม่ขึ้นอยู่กับสิ่งที่เซิร์ฟเวอร์ฐานข้อมูลที่คุณกำลังทำงานอยู่หรือไม่ (FYI ฉันใช้ MSSQL)



23
แทรกการปรับปรุงทริกเกอร์วิธีการตรวจสอบว่าแทรกหรือปรับปรุง
ฉันต้องเขียนส่วนแทรก, อัปเดตทริกเกอร์ในตาราง A ซึ่งจะลบแถวทั้งหมดออกจากตาราง B ที่มีหนึ่งคอลัมน์ (บอกว่าเรียง) มีค่าเช่นค่าที่แทรก / อัปเดตในคอลัมน์ของตาราง A (พูด Col1) ฉันจะเขียนมันอย่างไรเพื่อให้ฉันสามารถจัดการกับทั้งกรณีอัปเดตและแทรก ฉันจะตรวจสอบว่ามีการดำเนินการทริกเกอร์สำหรับการปรับปรุงหรือแทรก

12
ฉันจะลบอักขระแรกของคอลัมน์ที่ระบุในตารางได้อย่างไร
ใน SQL ฉันจะลบ 4 อักขระแรกของค่าของคอลัมน์ที่ระบุในตารางได้อย่างไร ชื่อคอลัมน์และค่าตัวอย่างคือStudent Code ABCD123Stu1231ฉันต้องการลบ 4 ตัวอักษรแรกจากตารางของฉันสำหรับบันทึกทั้งหมด กรุณาแนะนำฉัน
162 sql  sql-server  string  tsql 

15
เทคนิคที่ดีกว่าสำหรับการตัดเลขศูนย์ชั้นนำใน SQL Server หรือไม่
ฉันใช้มันมาระยะหนึ่งแล้ว: SUBSTRING(str_col, PATINDEX('%[^0]%', str_col), LEN(str_col)) อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันพบปัญหาเกี่ยวกับคอลัมน์ที่มีอักขระ "0" ทั้งหมดเช่น '00000000' เนื่องจากไม่พบอักขระที่ไม่ใช่ "0" ให้ตรงกัน เทคนิคทางเลือกที่ฉันเคยเห็นคือการใช้TRIM: REPLACE(LTRIM(REPLACE(str_col, '0', ' ')), ' ', '0') ปัญหานี้มีปัญหาหากมีช่องว่างในตัวเพราะจะเปลี่ยนเป็น "0" เมื่อช่องว่างนั้นถูกเปลี่ยนกลับเป็น "0" ฉันพยายามหลีกเลี่ยงสเกลาร์ UDF ฉันพบปัญหาเกี่ยวกับประสิทธิภาพการทำงานกับ UDF จำนวนมากใน SQL Server 2005

13
วิธีการเปลี่ยนค่าคอลัมน์ข้อมูลประจำตัวโดยทางโปรแกรม
ฉันมี 2005 ฐานข้อมูล MS SQL กับตารางกับคอลัมน์Test เป็นคอลัมน์ข้อมูลประจำตัวIDID ฉันมีแถวในตารางนี้และทุกคนมีค่าที่เพิ่มขึ้นของ ID อัตโนมัติที่สอดคล้องกัน ตอนนี้ฉันต้องการเปลี่ยน ID ทุกตัวในตารางนี้ดังนี้: ID = ID + 1 แต่เมื่อฉันทำสิ่งนี้ฉันได้รับข้อผิดพลาด: ไม่สามารถอัปเดตคอลัมน์ข้อมูลประจำตัว 'ID' ฉันเคยลองแล้ว: ALTER TABLE Test NOCHECK CONSTRAINT ALL set identity_insert ID ON แต่นี่ไม่ได้แก้ปัญหา ฉันต้องมีการระบุตัวตนในคอลัมน์นี้ แต่ฉันต้องเปลี่ยนค่าเช่นกันเป็นครั้งคราว ดังนั้นคำถามของฉันคือทำอย่างไรจึงจะทำงานนี้ให้สำเร็จ

6
Linq ถึง Sql: การรวมภายนอกด้านซ้ายหลายรายการ
ฉันมีปัญหาในการหาวิธีใช้การรวมภายนอกด้านซ้ายมากกว่าหนึ่งรายการโดยใช้ LINQ กับ SQL ฉันเข้าใจวิธีใช้การรวมภายนอกหนึ่งครั้ง ฉันใช้ VB.NET ด้านล่างเป็นไวยากรณ์ SQL ของฉัน T-SQL SELECT o.OrderNumber, v.VendorName, s.StatusName FROM Orders o LEFT OUTER JOIN Vendors v ON v.Id = o.VendorId LEFT OUTER JOIN Status s ON s.Id = o.StatusId WHERE o.OrderNumber >= 100000 AND o.OrderNumber <= 200000

3
รวม INSERT INTO และกับ / CTE
ฉันมี CTE ที่ซับซ้อนมากและฉันต้องการแทรกผลลัพธ์ลงในตารางทางกายภาพ ต่อไปนี้ถูกต้องหรือไม่ INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos ( BatchID, AccountNo, APartyNo, SourceRowID ) WITH tab ( -- some query ) SELECT * FROM tab ฉันคิดว่าจะใช้ฟังก์ชั่นในการสร้าง CTE นี้ซึ่งจะทำให้ฉันสามารถใช้งานได้อีกครั้ง ความคิดใด ๆ

2
ทำให้มันง่ายและวิธีการหลาย CTE ในแบบสอบถาม
ฉันมีแบบสอบถาม T-SQL ง่าย ๆ นี้มันปล่อยกลุ่มคอลัมน์จากตารางและรวมข้อมูลจากตารางอื่น ๆที่เกี่ยวข้อง แบบจำลองข้อมูลของฉันง่าย ฉันมีกิจกรรมที่กำหนดไว้พร้อมผู้เข้าร่วม ฉันจำเป็นต้องรู้จำนวนผู้เข้าร่วมในแต่ละเหตุการณ์ วิธีแก้ปัญหาของฉันคือการเพิ่ม CTE ที่จัดกลุ่มกิจกรรมตามกำหนดเวลาและนับจำนวนผู้เข้าร่วม สิ่งนี้จะทำให้ฉันเข้าร่วมในข้อมูลนั้นต่อเหตุการณ์ที่กำหนดไว้ ทำให้การสืบค้นง่ายขึ้น ฉันต้องการที่จะทำให้การสืบค้นของฉันง่าย แต่ถ้าฉันเคยมีในอนาคตจำเป็นต้องมีผลลัพธ์ชั่วคราวเพิ่มเติมที่สามารถเข้าถึงได้ในระหว่างการสืบค้นง่ายๆฉันจะทำอย่างไร ฉันอยากได้มันถ้าฉันมี CTE ได้หลายอัน แต่ทำไม่ได้ใช่ไหม? ตัวเลือกของฉันที่นี่มีอะไรบ้าง ฉันตัดทอนมุมมองและทำสิ่งต่าง ๆ ในชั้นข้อมูลแอปพลิเคชัน ฉันชอบที่จะแยกแบบสอบถาม SQL ของฉัน

4
T-SQL - ฟังก์ชันพร้อมพารามิเตอร์เริ่มต้น
ฉันมีสคริปต์นี้: CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 ) RETURNS BIT AS BEGIN IF EXISTS ( bla bla bla ) RETURN 1; RETURN 0; END GO ฉันต้องการใช้ในขั้นตอนด้วยวิธีนี้: IF dbo.CheckIfSFExists( 23 ) = 0 SET @retValue = 'bla bla bla'; แต่ฉันได้รับข้อผิดพลาด: มีการระบุจำนวนอาร์กิวเมนต์ไม่เพียงพอสำหรับโพรซีเดอร์หรือฟังก์ชัน dbo.CheckIfSFExists ทำไมมันไม่ทำงาน

8
บิตที่มีค่าคงที่ 1 หรือ 0 ใน SQL Server
เป็นไปได้ไหมที่จะแสดง 1 หรือ 0 เป็นบิตเมื่อใช้เป็นค่าฟิลด์ในคำสั่ง select? เช่น ในคำสั่งกรณีนี้ (ซึ่งเป็นส่วนหนึ่งของคำสั่งที่เลือก) ICourseBased เป็นประเภท int case when FC.CourseId is not null then 1 else 0 end as IsCoursedBased เพื่อให้เป็นประเภทบิตฉันต้องโยนค่าทั้งสอง case when FC.CourseId is not null then cast(1 as bit) else cast(0 as bit) end as IsCoursedBased มีวิธีสั้น ๆ ในการแสดงค่าเป็น bit type โดยไม่ต้องร่ายทุกครั้งหรือไม่? (ฉันใช้ …
154 sql  sql-server  tsql  bit 

5
เปรียบเทียบ DATETIME และ DATE โดยไม่สนใจช่วงเวลา
ฉันมีสองตารางที่คอลัมน์เป็นประเภทของ[date]DATETIME2(0) ฉันต้องเปรียบเทียบสองเรคคอร์ดโดยส่วนวันที่ของพวกเขา (วัน + เดือน + ปี) การละทิ้งเวลาส่วน (ชั่วโมง + นาที + วินาที) ฉันจะทำสิ่งนั้นได้อย่างไร

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