คำถามติดแท็ก sql-server

Microsoft SQL Server ทุกรุ่น (ไม่ใช่ MySQL) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น sql-server-2016 เนื่องจากมักเกี่ยวข้องกับคำถาม

6
อะไรคือวิธีที่แตกต่างในการแทนที่ ISNULL () ในส่วนคำสั่ง WHERE ที่ใช้เฉพาะค่าตัวอักษร?
สิ่งนี้ไม่เกี่ยวกับ: นี่ไม่ใช่คำถามเกี่ยวกับการสืบค้นทั้งหมดที่ยอมรับอินพุตของผู้ใช้หรือใช้ตัวแปร นี่เป็นเรื่องเกี่ยวกับเคียวรีที่ISNULL()ใช้ในส่วนWHEREคำสั่งเพื่อแทนที่NULLค่าด้วยค่า canary เพื่อเปรียบเทียบกับเพรดิเคตและวิธีต่างๆในการเขียนเคียวรีเหล่านั้นใหม่เพื่อให้SARGableใน SQL Server ทำไมคุณไม่มีที่นั่งตรงนั้นล่ะ? แบบสอบถามตัวอย่างของเราขัดต่อสำเนาโลคัลของฐานข้อมูล Stack Overflow บน SQL Server 2016 และค้นหาผู้ใช้ที่NULLมีอายุหรืออายุ <18 SELECT COUNT(*) FROM dbo.Users AS u WHERE ISNULL(u.Age, 17) < 18; แผนคิวรีแสดงการสแกนของดัชนีที่ไม่ได้จัดกลุ่มอย่างรอบคอบ ตัวดำเนินการสแกนแสดง (ขอบคุณส่วนเพิ่มเติมของ XML แผนการดำเนินการจริงใน SQL Server รุ่นล่าสุด) ที่เราอ่านทุกแถวของ stinkin โดยรวมแล้วเราอ่าน 9157 ครั้งและใช้เวลา CPU ประมาณครึ่งวินาที: Table 'Users'. Scan count 1, logical reads …
55 sql-server 

2
วิธีสร้างพารามิเตอร์ Unicode และชื่อตัวแปร
งานทั้งหมดนี้: CREATE DATABASE [¯\_(ツ)_/¯]; GO USE [¯\_(ツ)_/¯]; GO CREATE SCHEMA [¯\_(ツ)_/¯]; GO CREATE TABLE [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯] NVARCHAR(20)); GO CREATE UNIQUE CLUSTERED INDEX [¯\_(ツ)_/¯] ON [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]); GO INSERT INTO [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]) VALUES (N'[¯\_(ツ)_/¯]'); GO CREATE VIEW [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]; GO CREATE PROC [¯\_(ツ)_/¯].[sp_¯\_(ツ)_/¯] @Shrug NVARCHAR(20) AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] …

11
ผ่านพารามิเตอร์อาร์เรย์ไปยังกระบวนงานที่เก็บไว้
ฉันมีกระบวนการที่คว้าบันทึกจำนวนมาก (1,000 รายการ) และดำเนินการกับพวกเขาและเมื่อฉันทำเสร็จแล้วฉันต้องทำเครื่องหมายเป็นจำนวนมากว่าผ่านการประมวลผล ฉันสามารถระบุสิ่งนี้กับรายการรหัสขนาดใหญ่ ฉันกำลังพยายามหลีกเลี่ยงรูปแบบ "การอัพเดทในวง" ดังนั้นฉันจึงต้องการหาวิธีที่มีประสิทธิภาพมากขึ้นในการส่งถุง ID นี้ไปยัง MS SQL Server 2008 ที่เก็บไว้ proc ข้อเสนอ # 1 - พารามิเตอร์ที่มีมูลค่าของตาราง ฉันสามารถกำหนดประเภทตารางที่มีเพียง ID ฟิลด์และส่งตารางที่เต็มไปด้วย ID เพื่ออัปเดต ข้อเสนอ # 2 - พารามิเตอร์ XML (varchar) พร้อม OPENXML () ในเนื้อหาของ proc ข้อเสนอ # 3 - การแยกวิเคราะห์รายการ ฉันควรหลีกเลี่ยงสิ่งนี้ถ้าเป็นไปได้เพราะดูเหมือนว่าจะเทอะทะและผิดพลาดได้ง่าย การตั้งค่าใด ๆ ในหมู่เหล่านี้หรือความคิดใด ๆ ที่ฉันพลาดไป?

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 ไวยากรณ์ที่จะทำคืออะไร?

1
มีประโยชน์ใด ๆ ในการกำหนดฟังก์ชั่นที่นอกเหนือจาก Halloween Protection หรือไม่?
เป็นที่ทราบกันดีว่าSCHEMABINDINGฟังก์ชั่นสามารถหลีกเลี่ยงสปูลที่ไม่จำเป็นในแผนการอัพเดทได้: หากคุณใช้ UDF แบบ T-SQL แบบง่ายที่ไม่ได้แตะตารางใด ๆ (เช่นไม่เข้าถึงข้อมูล) ตรวจสอบให้แน่ใจว่าคุณระบุSCHEMABINDINGตัวเลือกระหว่างการสร้าง UDF สิ่งนี้จะทำให้ UDFs schema-bound และตรวจสอบให้แน่ใจว่าเคียวรีเครื่องมือเพิ่มประสิทธิภาพจะไม่สร้างตัวดำเนินการสปูลที่ไม่จำเป็นสำหรับแผนแบบสอบถามที่เกี่ยวข้องกับ UDF เหล่านี้ มีข้อได้เปรียบอื่น ๆ ของSCHEMABINDINGฟังก์ชั่นแม้ว่าจะไม่สามารถเข้าถึงข้อมูลได้หรือไม่?

3
ชะลอตัวลงอย่างมากในการสืบค้น SQL Server ในการเพิ่มไวด์การ์ด (หรือบน)
ฉันมีสวนสัตว์ 20 ล้านตัวที่ฉันติดตามบนฐานข้อมูล SQL Server 2005 ของฉัน ประมาณ 1% ของพวกเขาเป็นสีดำและประมาณ 1% ของพวกเขาเป็นหงส์ ฉันต้องการทราบรายละเอียดของหงส์ดำทั้งหมดและไม่ต้องการลบหน้าผลลัพธ์ที่ฉันทำ: select top 10 * from animal where colour like 'black' and species like 'swan' (ใช่อย่างน้อยที่สุดฟิลด์เหล่านั้นเป็นข้อความอิสระ แต่ทั้งคู่มีการทำดัชนี) มันกลับกลายเป็นว่าเราไม่มีสัตว์เช่นนี้เมื่อแบบสอบถามส่งคืนชุดว่างในเวลาประมาณ 300 มิลลิวินาที มันคงจะเร็วกว่าสองเท่าถ้าฉันใช้ '=' แทนที่จะเป็น 'like' แต่ฉันมีลางสังหรณ์ที่หลังกำลังจะช่วยฉันพิมพ์บ้าง ปรากฎว่าหัวหน้าผู้ดูแลสวนคิดว่าเขาอาจเข้ามาในหงส์บางตัวว่า 'ดำ' ดังนั้นฉันจึงปรับเปลี่ยนการค้นหาตาม: select top 10 * from animal where colour like 'black%' …

7
ทำไม ORDER BY ไม่ได้อยู่ในมุมมอง
ฉันเข้าใจ ว่าคุณ ไม่สามารถมี ORDER BYมุมมอง (อย่างน้อยใน SQL Server 2012 ฉันทำงานด้วย) ฉันยังเข้าใจว่า "ถูกต้อง" วิธีการจัดเรียงมุมมองคือการวางORDER BYรอบSELECTงบสอบถามมุมมอง แต่ด้วยความที่ค่อนข้างใหม่สำหรับ SQL เชิงปฏิบัติและมุมมองการใช้งานที่หลากหลายฉันต้องการที่จะเข้าใจว่าเพราะเหตุใดการออกแบบจึงทำเช่นนี้ หากฉันติดตามประวัติอย่างถูกต้องสิ่งนี้จะเกิดขึ้นได้ครั้งหนึ่งและถูกลบออกอย่างชัดเจนจาก SQL Server 2008 และอื่น ๆ (อย่าพูดฉันในรุ่นที่แน่นอน) อย่างไรก็ตามเหตุผลที่ดีที่สุดที่ฉันสามารถคิดได้ว่าเหตุใด Microsoft จึงลบคุณลักษณะนี้เนื่องจาก "มุมมองเป็นการรวบรวมข้อมูลที่ไม่เรียงลำดับ" ฉันถือว่ามีเหตุผลที่ดีและมีเหตุผลว่าทำไมมุมมองจึงไม่ควรถูกคัดแยก เหตุใดมุมมองจึงไม่สามารถรวบรวมข้อมูลที่แบนได้ ทำไมไม่มีการคัดแยกเฉพาะ ดูเหมือนจะไม่ยากที่จะเกิดขึ้นกับสถานการณ์ที่ (อย่างน้อยสำหรับฉัน / IMHO) ดูเหมือนว่าใช้งานง่ายอย่างสมบูรณ์แบบที่จะมีมุมมองที่เรียงลำดับ


4
อะไรคือเหตุผลทางธุรกิจวัตถุประสงค์ในการใช้ SQL Server 2012 มากกว่า 2008 R2
บริษัท ของฉันกำลังเผชิญกับการตัดสินใจว่าจะซื้อ SQL Server 2012 Denali หรือ SQL Server 2008 R2 สำหรับเซิร์ฟเวอร์ฐานข้อมูลใหม่ ฉันกำลังมองหาเหตุผลวัตถุประสงค์เพื่อเลือกอย่างใดอย่างหนึ่ง ความต้องการของเรา: Standard edition (สำหรับเหตุผลด้านการเงินและการขาดคุณสมบัติองค์กร) ภาระงาน OLTP (ซึ่งหมายความว่าเราไม่ต้องการฟังก์ชั่นการสร้างหน้าต่างใหม่และดัชนีที่จัดเก็บคอลัมน์) ขนาดฐานข้อมูล 10-100 GB ไม่จำเป็นต้องมีคุณสมบัติระบบธุรกิจอัจฉริยะ ต้องการเอ็นจินเชิงสัมพันธ์เท่านั้น การมิร์เรอร์ฐานข้อมูลแบบซิงโครนัส ปัจจุบันเหตุผลต่อไปนี้เป็นที่รู้จักกันสำหรับฉัน: SQL Server 2012 Denali รุ่นใหม่ล่าสุดที่มีอยู่ SQL Server 2008 R2 เทคโนโลยีที่พิสูจน์แล้ว ฉันไม่สามารถหาเหตุผลทางเทคนิคได้มากมายที่จะชอบอีกเหตุผลหนึ่ง โดยพื้นฐานแล้วจะมีการเลือกใช้เทคโนโลยีที่ได้รับการพิสูจน์แล้วว่าทำงานได้สำเร็จเทียบกับรุ่นใหม่ล่าสุดและยิ่งใหญ่ที่สุดที่มีให้ เหตุผลวัตถุประสงค์ในการตัดสินใจมีอะไรบ้าง

4
วิธีที่ง่ายที่สุดในการสร้างตารางชั่วคราวใน SQL Server ที่สามารถเก็บผลลัพธ์ของกระบวนงานที่เก็บไว้คืออะไร
หลายครั้งที่ฉันต้องเขียนสิ่งต่อไปนี้เมื่อต้องจัดการกับ SQL Server create table #table_name ( column1 int, column2 varchar(200) ... ) insert into #table_name execute some_stored_procedure; แต่สร้างตารางที่มีไวยากรณ์ที่แน่นอนเนื่องจากผลลัพธ์ของกระบวนงานที่เก็บไว้เป็นงานที่น่าเบื่อ ตัวอย่างเช่นผลลัพธ์ของsp_helppublicationมี 48 คอลัมน์! ฉันต้องการทราบว่ามีวิธีง่ายๆในการทำเช่นนี้หรือไม่ ขอบคุณ

5
ทำไมฉันจะไม่ใช้ตัวเลือก SQL Server“ ปรับให้เหมาะสมสำหรับปริมาณงานเฉพาะกิจ”?
ฉันได้อ่านบทความที่ยอดเยี่ยมเกี่ยวกับการแคชแผน SQL Server โดย Kimberly Tripp เช่นนี้: http://www.sqlskills.com/blogs/kimberly/plan-cache-and-optimizing-for-adhoc-workloads/ ทำไมถึงมีตัวเลือกในการ "เพิ่มประสิทธิภาพสำหรับปริมาณงานแบบเฉพาะกิจ"? สิ่งนี้ไม่ควรเกิดขึ้นหรือ ไม่ว่านักพัฒนาจะใช้ ad-hoc SQL หรือไม่ทำไมคุณไม่เปิดใช้งานตัวเลือกนี้ในทุกอินสแตนซ์ที่รองรับ (SQL 2008+) ซึ่งจะช่วยลดการขยายตัวของแคช?

3
ฉันจะเรียกคืนระเบียนที่ถูกลบได้อย่างไร
ฉันลบประมาณ 2,000,000 ระเบียนจากตาราง SQL Server 2008 ระยะไกลโดยไม่ตั้งใจ เซิร์ฟเวอร์ไม่อนุญาตให้ฉันเข้าถึงไฟล์สำรองข้อมูลทางฝั่งเซิร์ฟเวอร์ มีวิธีใดที่จะเรียกคืนบันทึกเหล่านี้หรือไม่

7
วิธีรวมวันที่และเวลาเข้ากับ datetime2 ใน SQL Server
รับส่วนประกอบดังนี้ DECLARE @D DATE = '2013-10-13' DECLARE @T TIME(7) = '23:59:59.9999999' วิธีที่ดีที่สุดในการรวมพวกเขาเพื่อสร้างDATETIME2(7)ผลลัพธ์ที่มีค่า'2013-10-13 23:59:59.9999999'คืออะไร? บางสิ่งที่ไม่ทำงานแสดงอยู่ด้านล่าง SELECT @D + @T วันที่ตัวดำเนินการชนิดข้อมูลไม่ถูกต้องสำหรับตัวดำเนินการเพิ่ม SELECT CAST(@D AS DATETIME2(7)) + @T ตัวถูกดำเนินการชนิดข้อมูล datetime2 ไม่ถูกต้องสำหรับตัวดำเนินการเพิ่ม SELECT DATEADD(NANOSECOND,DATEDIFF(NANOSECOND,CAST('00:00:00.0000000' AS TIME),@T),@D) ฟังก์ชั่น Dateiff ส่งผลให้เกิดการล้น จำนวนของส่วนของวันที่ที่แยกอินสแตนซ์วันที่ / เวลาสองรายการมีขนาดใหญ่เกินไป ลองใช้ Dateiff ด้วยส่วนที่แม่นยำน้อยกว่า * ล้นสามารถหลีกเลี่ยงได้ในฐานข้อมูล SQL Azure และ SQL Server 2016 DATEDIFF_BIGโดยใช้ …

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

12
เหตุใดการจับคู่คีย์ / คีย์ต่างประเทศจึงไม่ถูกใช้เพื่อการเข้าร่วม
เท่าที่ฉันสามารถหา DBMSs จำนวนมาก (เช่น mysql, postgres, mssql) ใช้ชุดค่าผสม fk และ pk เพียงเพื่อ จำกัด การเปลี่ยนแปลงข้อมูล แต่ไม่ค่อยมีการใช้วิธีเลือกคอลัมน์เพื่อเข้าร่วมโดยอัตโนมัติ ทำไมถึงเป็นอย่างนั้น? หากคุณกำหนดความสัมพันธ์ระหว่าง 2 ตารางด้วย pk / fk แล้วทำไมฐานข้อมูลไม่สามารถระบุได้ว่าถ้าฉันเข้าร่วมตารางเหล่านั้นฉันต้องการเข้าร่วมในคอลัมน์ pk / fk แก้ไข: เพื่อชี้แจงนี้เล็กน้อย: สมมติว่าฉันมี table1 และ table2 ตารางที่ 1 มีคีย์ต่างประเทศในคอลัมน์ a ซึ่งอ้างอิงถึงคีย์หลักในตารางที่ 2 คอลัมน์ b ตอนนี้ถ้าฉันเข้าร่วมตารางเหล่านี้ฉันจะต้องทำสิ่งนี้: SELECT * FROM table1 JOIN table2 ON table1.a = …
48 mysql  sql-server 

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