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

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

7
วิธีที่มีประสิทธิภาพที่สุดในการรับจำนวนคอลัมน์ขั้นต่ำใน SQL Server 2005 คืออะไร
ฉันอยู่ในสถานการณ์ที่ฉันต้องการรับค่าต่ำสุดจาก 6 คอลัมน์ ฉันได้พบสามวิธีในการบรรลุเป้าหมายนี้ แต่ฉันมีความกังวลเกี่ยวกับประสิทธิภาพของวิธีการเหล่านี้และต้องการทราบว่าวิธีไหนที่จะดีกว่าสำหรับการแสดง วิธีแรกคือการใช้คำสั่งคดีใหญ่ นี่คือตัวอย่างที่มี 3 คอลัมน์ตามตัวอย่างในลิงก์ด้านบน คำสั่ง case ของฉันจะนานกว่านี้เพราะฉันจะดูที่ 6 คอลัมน์ Select Id, Case When Col1 <= Col2 And Col1 <= Col3 Then Col1 When Col2 <= Col3 Then Col2 Else Col3 End As TheMin From MyTable ตัวเลือกที่สองคือการใช้ประกอบกับงบเลือกหลายUNION ฉันจะใส่สิ่งนี้ใน UDF ที่ยอมรับพารามิเตอร์ Id select Id, dbo.GetMinimumFromMyTable(Id) from MyTable …

1
อะไรคือวัตถุประสงค์เชิงเหตุผลที่ต้องการ SQL Server 2016 มากกว่าเวอร์ชั่นก่อนหน้า?
เนื่องจาก Microsoft ทำให้รุ่น SQL Server อัปเกรดบ่อยขึ้นตั้งแต่ SQL Server 2005 หรือ 2008 วันหลาย บริษัท พบว่าเป็นการยากที่จะตัดสินว่าการอัปเกรดเป็น "ต้องมี!" และเมื่อการอัปเกรดเป็น "ดีที่มี" ในคำถามก่อนหน้านี้สองสามคำถามที่ถามถึงเหตุผลที่ต้องการรุ่นใหม่กว่าของ SQL Server มากกว่ารุ่นก่อนหน้าอะไรคือเหตุผลทางเทคนิคหรือเหตุผลทางธุรกิจที่ บริษัท อาจพิจารณาเพื่ออัปเกรดเป็น SQL Server 2016 มากกว่ารุ่นก่อนหน้า เปิดตัวเช่น SQL Server 2014 ( คำถามนี้เกี่ยวกับ SQL Server 2012 เมื่อเทียบกับ SQL Server 2008 หรือนี่เกี่ยวกับ SQL Server 2012 เทียบกับ SQL Server 2005 เป็นตัวอย่างของจิตวิญญาณของคำถามนี้คำตอบของพวกเขายังขยายไปด้วยเหตุผลบางประการที่นี่สำหรับ บริษัท …

2
มีวิธีการป้องกันไม่ให้ Scalar UDFs ในคอลัมน์ที่คำนวณได้จากการยับยั้งความเท่าเทียมกันหรือไม่?
มีการเขียนมากมายเกี่ยวกับภัยของ Scalar UDFใน SQL Server การค้นหาทั่วไปจะส่งคืนผลลัพธ์จำนวนมาก มีสถานที่บางแห่งที่ Scalar UDF เป็นตัวเลือกเท่านั้น เป็นตัวอย่าง: เมื่อจัดการกับ XML: XQuery ไม่สามารถใช้เป็นข้อกำหนดคอลัมน์ที่คำนวณได้ ทางเลือกหนึ่งที่มีการบันทึกโดย Microsoft คือการใช้Scalar UDFเพื่อแค็ปซูล XQuery ของคุณใน Scalar UDF จากนั้นใช้ในคอลัมน์ที่คำนวณ สิ่งนี้มีเอฟเฟกต์ต่าง ๆ และวิธีแก้ปัญหาบางอย่าง ดำเนินการทีละแถวเมื่อมีการสอบถามตาราง บังคับให้คิวรีทั้งหมดกับตารางทำงานแบบอนุกรม คุณสามารถหลีกเลี่ยงการประมวลผลแบบแถวต่อแถวได้โดยการกำหนดฟังก์ชันและคงคอลัมน์ที่คำนวณไว้หรือสร้างดัชนี ไม่มีวิธีใดที่สามารถป้องกันการบังคับให้ลำดับของเคียวรีที่กดปุ่มตารางแม้ว่าสเกลาร์ UDF ไม่ได้ถูกอ้างอิง มีวิธีที่รู้จักกันในการทำเช่นนั้น?

3
เมื่อใดที่คำนวณคอลัมน์
กำหนดค่าสำหรับคอลัมน์ที่คำนวณได้เมื่อใด เมื่อค่าถูกดึง? เมื่อมีการเปลี่ยนแปลงค่าหรือไม่ บางเวลาอื่น ๆ ฉันเดาว่านี่เป็นคำถามสามเณรเพราะฉันไม่พบสิ่งใดในการค้นหาของฉัน

2
มีประโยชน์หรือไม่หากมีไดเรกทอรีรูตอินสแตนซ์ของ SQL Server บนไดรฟ์แยกต่างหาก
ฉันรู้ว่าเป็นไปได้ที่จะเปลี่ยนเส้นทางเริ่มต้นจำนวนมากเมื่อติดตั้ง SQL Server และโดยทั่วไปเมื่อฉันติดตั้งฉันเปลี่ยนข้อมูลและโฟลเดอร์บันทึกเป็นไดรฟ์แยกต่างหาก (โดยทั่วไปคือ D และ E) แต่ฉันเพิ่งได้รับ เครื่องที่ติดตั้งล่วงหน้าซึ่งใช้ชื่ออินสแตนซ์นอกเหนือจากค่าเริ่มต้นและพวกเขาได้กำหนดค่าไดเรกทอรีรากของอินสแตนซ์ให้อยู่ในไดรฟ์ D พร้อมกับไฟล์ mdf ซึ่งหมายความว่าสิ่งที่ตามปกติจะเป็นไดรฟ์ที่ค่อนข้างสะอาดโดยมีเพียงโฟลเดอร์และไฟล์ฐานข้อมูลในตอนนี้ฉันมีการติดตั้งไบนารีของ SQL Server แบบเต็มเช่นกัน คือตอนนี้ฉันมีดังต่อไปนี้: C:\Program Files\Microsoft SQL Server\ --Base Install D:\Microsoft SQL Server\MSSQL10_50.MyInstance --Instance Binaries D:\Microsoft SQL Server\MSSQL10_50.MyInstance\MSSQL\DATA --Data Files E:\Microsoft SQL Server\MSSQL10_50.MyInstance\MSSQL\LOGS --Log Files โดยปกติแล้วฉันจะวิ่งด้วยบางสิ่งเช่น: C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\ --Base Install & Default Instance Binaries …

5
SQL Deadlock บนคีย์คลัสเตอร์ที่ถูกล็อคแบบพิเศษ (พร้อม NHibernate) ที่ลบ / แทรก
ฉันทำงานเกี่ยวกับปัญหาการหยุดชะงักนี้มาหลายวันแล้วและไม่ว่าฉันจะทำอะไรมันยังคงมีอยู่ไม่ทางใดก็ทางหนึ่ง ขั้นแรกสถานที่ทั่วไป: เรามีการเข้าชมด้วย VisitItems ในความสัมพันธ์แบบหนึ่งต่อหลาย VisitItems ข้อมูลที่เกี่ยวข้อง: CREATE TABLE [BAR].[VisitItems] ( [Id] INT IDENTITY (1, 1) NOT NULL, [VisitType] INT NOT NULL, [FeeRateType] INT NOT NULL, [Amount] DECIMAL (18, 2) NOT NULL, [GST] DECIMAL (18, 2) NOT NULL, [Quantity] INT NOT NULL, [Total] DECIMAL (18, 2) NOT NULL, [ServiceFeeType] INT …

4
ควรหลีกเลี่ยง schema dbo หรือไม่
เมื่อพูดถึง dbo schema: เป็นวิธีปฏิบัติที่ดีที่สุดในการหลีกเลี่ยงการใช้ dbo schema เมื่อสร้างวัตถุฐานข้อมูลหรือไม่ เหตุใดจึงควรหลีกเลี่ยงสกีมา dbo หรือควร ผู้ใช้ฐานข้อมูลใดควรเป็นเจ้าของ dbo schema

2
ทำไมสัญลักษณ์ตัวแทนในกลุ่มจำแนกตามคำสั่งไม่ทำงาน
ฉันพยายามทำให้คำสั่ง SQL ต่อไปนี้ทำงาน แต่ฉันได้รับข้อผิดพลาดทางไวยากรณ์: SELECT A.*, COUNT(B.foo) FROM TABLE1 A LEFT JOIN TABLE2 B ON A.PKey = B.FKey GROUP BY A.* ที่นี่ A เป็นตารางกว้างที่มี 40 คอลัมน์และฉันต้องการหลีกเลี่ยงการแสดงชื่อแต่ละคอลัมน์ในกลุ่มตามข้อถ้าเป็นไปได้ ฉันมีตารางดังกล่าวจำนวนมากซึ่งฉันต้องเรียกใช้แบบสอบถามที่คล้ายกันดังนั้นฉันจะต้องเขียนกระบวนงานที่เก็บไว้ วิธีที่ดีที่สุดในการเข้าถึงสิ่งนี้คืออะไร? ฉันใช้ MS SQL Server 2008

3
ฉันควรใช้เทคนิค PowerShell ใดเพื่อพูดคุยกับ SQL Server
ในที่สุดฉันต้องการใช้ PowerShell เพื่อแทนที่สคริปต์ KornShell เก่าที่เราใช้สำหรับการมอนิเตอร์อินสแตนซ์ SQL แม้ว่าฉันจะมีช่วงเวลาที่ยากลำบาก แต่ก็ทำให้สมองของฉันได้รับวิธีที่ต่างกันที่ PowerShell สามารถพูดคุยกับเซิร์ฟเวอร์ SQL ได้ ไม่แน่ใจว่าเป็นของพวกเขาทั้งหมดหรือไม่ แต่นี่เป็นวิธีที่ต่างกันทั้งหมด 5 วิธีที่ฉันสามารถสืบค้นรุ่นของเซิร์ฟเวอร์ SQL: 1. SQLConnection. NET Class $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=MyServer;Database=Master;Integrated Security=True" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = "Select @@version as SQLServerVersion" $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet …

5
การกู้คืนการสำรองข้อมูลเป็น SQL Server เวอร์ชันเก่า
เมื่อพยายามคืนค่าการสำรองข้อมูลไปยังฐานข้อมูลSQL Server Express 2008ฉันได้รับข้อผิดพลาดดังต่อไปนี้: Restore failed for Server '...\SQLEXPRESS'. (Microsoft.SqlServer.SmoExtended) System.Data.SqlClient.SqlError: The database was backed up on a server running version 10.50.1600. That version is incompatible with this server, which is running version 10.00.2531. Either restore the database on a server that supports the backup, or use a backup that …

4
ฉันจะบอกได้อย่างไรว่าทำไมการแทรกในตารางที่กำหนดจึงช้า
ฉันรู้ว่า INSERT ในตาราง SQL อาจช้าด้วยเหตุผลหลายประการ: การมีอยู่ของ INSERT TRIGGERs บนโต๊ะ ข้อ จำกัด ที่บังคับใช้จำนวนมากที่ต้องตรวจสอบ (โดยปกติคือกุญแจต่างประเทศ) หน้าแยกในดัชนีคลัสเตอร์เมื่อแถวถูกแทรกในกลางตาราง การอัพเดตดัชนีที่ไม่ใช่คลัสเตอร์ทั้งหมดที่เกี่ยวข้อง การบล็อกจากกิจกรรมอื่น ๆ บนโต๊ะ เวลาตอบสนองการเขียน IO แย่ ... ทุกอย่างที่ฉันพลาดไป? ฉันจะรู้ได้อย่างไรว่าตัวไหนมีความรับผิดชอบในกรณีเฉพาะของฉัน? ฉันจะวัดผลกระทบของการแยกหน้าเทียบกับการปรับปรุงดัชนีที่ไม่ทำคลัสเตอร์กับทุกอย่างได้อย่างไร ฉันมี proc ที่เก็บไว้ซึ่งแทรกประมาณ 10,000 แถวต่อครั้ง (จากตารางชั่วคราว) ซึ่งใช้เวลาประมาณ 90 วินาทีต่อแถว 10k นั่นเป็นสิ่งที่ยอมรับไม่ได้ช้าเพราะจะทำให้เกิดการหมดเวลาอื่น ๆ ฉันได้ดูแผนการดำเนินการและฉันเห็นงาน INSERT CLUSTERED INDEX และ INDEX SEEKS ทั้งหมดจากการค้นหา FK แต่ก็ยังไม่ได้บอกฉันว่าทำไมมันถึงใช้เวลานาน ไม่มีทริกเกอร์ แต่ตารางมี FKeys …

4
วิธีที่ปรับขนาดได้เพื่อจำลอง HASHBYTES โดยใช้ฟังก์ชันสเกลาร์ SQL CLR คืออะไร?
เป็นส่วนหนึ่งของกระบวนการ ETL ของเราเราเปรียบเทียบแถวจากการจัดเตรียมกับฐานข้อมูลการรายงานเพื่อคำนวณว่าคอลัมน์ใดมีการเปลี่ยนแปลงจริงหรือไม่นับตั้งแต่ข้อมูลถูกโหลดครั้งล่าสุด การเปรียบเทียบจะขึ้นอยู่กับคีย์เฉพาะของตารางและการแฮชบางประเภทของคอลัมน์อื่นทั้งหมด ขณะนี้เราใช้HASHBYTESกับอัลกอริทึมและได้พบว่ามันไม่ได้ขนาดบนเซิร์ฟเวอร์ขนาดใหญ่ถ้าหลายเธรดพร้อมกันมีการโทรทั้งหมดSHA2_256HASHBYTES ปริมาณงานที่วัดเป็นแฮชต่อวินาทีจะไม่เพิ่มเธรดที่เกิดขึ้นพร้อมกัน 16 เธรดเมื่อทดสอบบนเซิร์ฟเวอร์คอร์ 96 ฉันทดสอบโดยเปลี่ยนจำนวนMAXDOP 8ข้อความค้นหาที่เกิดขึ้นพร้อมกันจาก 1 - 12 การทดสอบด้วยMAXDOP 1แสดงให้เห็นถึงคอขวดที่สามารถปรับขยายได้แบบเดียวกัน วิธีแก้ปัญหาฉันต้องการลองใช้โซลูชัน SQL CLR นี่คือความพยายามของฉันในการระบุข้อกำหนด: ฟังก์ชั่นจะต้องสามารถมีส่วนร่วมในแบบสอบถามแบบขนาน ฟังก์ชั่นจะต้องกำหนดขึ้น ฟังก์ชั่นจะต้องรับอินพุตNVARCHARหรือVARBINARYสตริง (คอลัมน์ที่เกี่ยวข้องทั้งหมดถูกต่อกันเข้าด้วยกัน) ขนาดอินพุตปกติของสตริงจะมีความยาว 100 - 20000 อักขระ 20000 ไม่ใช่ค่าสูงสุด โอกาสของการชนกันของแฮชควรจะเท่ากับหรือดีกว่าอัลกอริทึม MD5 CHECKSUMใช้งานไม่ได้สำหรับเราเพราะมีการชนกันมากเกินไป ฟังก์ชันต้องขยายขนาดได้ดีบนเซิร์ฟเวอร์ขนาดใหญ่ (ปริมาณงานต่อเธรดไม่ควรลดลงอย่างมีนัยสำคัญเมื่อจำนวนเธรดเพิ่มขึ้น) สำหรับ Application Reasons ™ให้ถือว่าฉันไม่สามารถบันทึกค่าแฮชของตารางการรายงานได้ เป็น CCI ที่ไม่สนับสนุนทริกเกอร์หรือคอลัมน์ที่คำนวณได้ (มีปัญหาอื่น ๆ เช่นกันที่ฉันไม่ต้องการเข้าร่วม) วิธีที่ปรับขนาดได้เพื่อจำลองHASHBYTESโดยใช้ฟังก์ชัน SQL CLR คืออะไร …

10
ฉันจะได้รับการชดเชยที่ถูกต้องระหว่างเวลา UTC กับเวลาท้องถิ่นสำหรับวันที่ก่อนหรือหลัง DST ได้อย่างไร
ขณะนี้ฉันใช้สิ่งต่อไปนี้เพื่อรับเวลาข้อมูลท้องถิ่นจาก UTC วันที่และเวลา: SET @offset = DateDiff(minute, GetUTCDate(), GetDate()) SET @localDateTime = DateAdd(minute, @offset, @utcDateTime) ปัญหาของฉันคือว่าถ้ากลางวันเวลาออมทรัพย์เกิดขึ้นระหว่างGetUTCDate()และ@utcDateTimeที่@localDateTimeสิ้นสุดขึ้นเป็นปิดชั่วโมง มีวิธีง่าย ๆ ในการแปลงจาก utc เป็นเวลาท้องถิ่นสำหรับวันที่ไม่ใช่วันที่ปัจจุบันหรือไม่? ฉันใช้ SQL Server 2005

4
วิธีค้นหาว่าใครลบข้อมูล SQL Server บ้าง
เจ้านายของฉันมีแบบสอบถามจากลูกค้าเมื่อวานนี้ถามว่าพวกเขาสามารถค้นหาผู้ที่ลบข้อมูลบางอย่างในฐานข้อมูล SQL Server ของพวกเขา (เป็นรุ่นด่วนหากเรื่องนั้น) ฉันคิดว่าสิ่งนี้สามารถพบได้จากบันทึกธุรกรรม (หากไม่ได้ถูกตัดทอน) - ถูกต้องหรือไม่ และถ้าเป็นเช่นนั้นคุณจะไปหาข้อมูลนี้ได้อย่างไร?

1
แนวทางสำหรับการบำรุงรักษาดัชนีข้อความแบบเต็ม
แนวทางใดที่ควรได้รับการพิจารณาสำหรับการรักษาดัชนีข้อความแบบเต็ม? ฉันควรสร้างใหม่หรือจัดระเบียบแค็ตตาล็อกข้อความแบบเต็ม (ดูBOL ) หรือไม่ จังหวะการบำรุงรักษาที่เหมาะสมคืออะไร ฮิวริสติกแบบใดที่คล้ายกับเกณฑ์การแตกแฟรกเมนต์ 10% และ 30%) สามารถใช้เพื่อกำหนดว่าเมื่อใดที่ต้องมีการบำรุงรักษา (ทุกอย่างด้านล่างเป็นเพียงข้อมูลเพิ่มเติมที่อธิบายรายละเอียดของคำถามและแสดงสิ่งที่ฉันคิดเกี่ยวกับจนถึงตอนนี้) ข้อมูลเพิ่มเติม: การวิจัยเริ่มต้นของฉัน มีจำนวนมากของทรัพยากรในการบำรุงรักษาดัชนี B-ต้นไม้ (เช่นคำถามนี้ , สคริปต์ Ola Hallengren ของและบล็อกโพสต์เกี่ยวกับเรื่องต่าง ๆ นานาจากเว็บไซต์อื่น ๆ ) อย่างไรก็ตามฉันพบว่าไม่มีทรัพยากรเหล่านี้ให้คำแนะนำหรือสคริปต์สำหรับการบำรุงรักษาดัชนี fulltext มีเอกสารของ Microsoftที่กล่าวถึงการจัดเรียงดัชนีดัชนีต้นไม้ของตารางฐานและจากนั้นดำเนินการ REORGANIZE ในแค็ตตาล็อกข้อความอาจปรับปรุงประสิทธิภาพ แต่ไม่ได้สัมผัสกับคำแนะนำเฉพาะใด ๆ เพิ่มเติม ฉันยังพบคำถามนี้แต่ส่วนใหญ่เน้นไปที่การติดตามการเปลี่ยนแปลง (การอัปเดตข้อมูลไปยังตารางอ้างอิงในดัชนี fulltext) อย่างไรและไม่ใช่ประเภทของการบำรุงรักษาตามกำหนดเวลาปกติที่สามารถเพิ่มประสิทธิภาพของดัชนีได้ ข้อมูลเพิ่มเติม: การทดสอบประสิทธิภาพขั้นพื้นฐาน นี้SQL ซอมีรหัสที่สามารถใช้ในการสร้างดัชนีข้อความเต็มกับAUTOการติดตามการเปลี่ยนแปลงและตรวจสอบทั้งขนาดและประสิทธิภาพการทำงานของดัชนีแบบสอบถามเป็นข้อมูลในตารางที่มีการแก้ไข เมื่อฉันเรียกใช้ตรรกะของสคริปต์บนสำเนาของข้อมูลการผลิตของฉัน (ตรงข้ามกับข้อมูลที่ประดิษฐ์ขึ้นในซอ) นี่คือบทสรุปของผลลัพธ์ที่ฉันเห็นหลังจากแต่ละขั้นตอนการปรับเปลี่ยนข้อมูล: แม้ว่าคำแถลงการปรับปรุงในสคริปต์นี้มีการวางแผนอย่างเป็นธรรม แต่ดูเหมือนว่าข้อมูลนี้จะแสดงให้เห็นว่ามีจำนวนมากที่ต้องได้รับจากการบำรุงรักษาตามปกติ ข้อมูลเพิ่มเติม: ความคิดเริ่มต้น …

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