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

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

3
ตัวเลือกสำหรับคำสั่ง ORDER BY ในมุมมองคืออะไร
คำถามนี้ต้องอยู่ในเว็บไซต์นี้ :) ORDER BY ถูกห้ามไม่ให้ใช้ในมุมมองตามที่ฉันเข้าใจเนื่องจากความเป็นไปได้ในการสั่งซื้อหลายครั้งด้วยเมื่อใช้มุมมองนี้ ฉันรู้ว่ามีวิธีการข้ามข้อ จำกัด นี้ตัวอย่างเช่นTOP 99.999999 PERCENTแต่ฉันอยากจะรู้ว่าอะไรคือวิธีปฏิบัติที่ดีที่สุดไม่ใช่วิธีที่จะแฮ็ก ดังนั้นถ้าฉันต้องการสร้างมุมมองในฐานข้อมูลของฉันสำหรับใช้ส่วนตัวหมายถึงฉันต้องการเชื่อมต่อกับฐานข้อมูลและดูข้อมูลที่ได้รับการแก้ไขและเรียงลำดับฉันจะทำอย่างไรถ้าฉันไม่สามารถสั่งซื้อมุมมองได้? ขณะนี้ใน SQL Server DB ของฉันฉันมีมุมมองกับการTOPแฮ็กและฉันใช้มันเยอะ แต่ก็รู้สึกผิด


4
มีการเปรียบเทียบเรียงลำดับสตริงต่อไปนี้ตามลำดับต่อไปนี้ 1,2,3,6,10,10A, 10B, 11 หรือไม่
ฉันมีฐานข้อมูลที่มีคอลัมน์ VARCHAR ที่มีจำนวนเต็มความยาวแตกต่างกัน ฉันต้องการจัดเรียงพวกเขาดังนั้น 10 มาหลังจาก 9 ไม่ใช่ 1 และ 70A มาหลังจาก 70 ฉันสามารถทำได้ด้วยPATINDEX () , คำสั่ง CTE และ CASE ในส่วนคำสั่ง WHERE อย่างไรก็ตามฉันสงสัยว่ามีการเปรียบเทียบที่นี่จะไม่จำเป็น

5
จัดกลุ่มตามชั่วโมงในชุดข้อมูลขนาดใหญ่
ใช้ MS SQL 2008 ฉันกำลังเลือกเขตข้อมูลเฉลี่ยจาก 2.5 ล้านระเบียน แต่ละระเบียนแสดงถึงหนึ่งวินาที MyField เป็นค่าเฉลี่ยรายชั่วโมงของบันทึก 1 วินาทีเหล่านั้น แน่นอนว่าซีพียูเซิร์ฟเวอร์ฮิต 100% และการเลือกใช้เวลานานเกินไป ฉันจำเป็นต้องบันทึกค่าเฉลี่ยเหล่านั้นเพื่อให้ SQL ไม่จำเป็นต้องเลือกระเบียนเหล่านั้นทั้งหมดในแต่ละคำขอ สิ่งที่สามารถทำได้? SELECT DISTINCT CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR) AS TimeStampHour, MIN([timestamp]) as TimeStamp, AVG(MyField) As AvgField FROM MyData WHERE TimeStamp > '4/10/2011' GROUP BY CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as …
12 sql-server  query 

4
ปล่อยข้อ จำกัด (ดัชนี) บนคอลัมน์
ฉันจะแก้ไขประเภทในตารางที่มีดัชนีอยู่ได้อย่างไร ฉันพยายามที่จะแก้ไขคอลัมน์ในตารางว่างเปล่าเพื่อแก้ไขประเภทจากวันที่เป็น varchar (15) และมีข้อผิดพลาดที่บอกว่ามีการพึ่งพาคอลัมน์ (ซึ่งกลายเป็นดัชนี) ฉันสามารถไปที่จุดนี้ได้อย่างง่ายดายด้วยการคลิกขวาที่ดัชนีและวางสคริปต์ แต่ฉันจำเป็นต้องทำสิ่งนี้บนเซิร์ฟเวอร์อื่น ๆ ที่ฉันจะไม่สามารถเข้าถึงชื่อดัชนีได้ มีวิธีที่ฉันสามารถสร้างสคริปต์ที่จะวางดัชนีใด ๆ ให้ฉันทำประเภทข้อมูลที่เปลี่ยนแปลงในคอลัมน์แล้วอ่านดัชนีหรือไม่ ขอบคุณ!



2
ข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Nullable ใน SQL Server 2005
ในโครงการหนึ่งที่ฉันกำลังดำเนินการอยู่ฉันต้องตั้งค่าเขตข้อมูลเฉพาะให้ไม่ซ้ำกัน (ไม่ใช่ปัญหา!) แต่ถ้าเขตข้อมูลเป็นโมฆะฉันต้องการให้ข้อ จำกัด ถูกละเว้น ใน SQL Server 2008 ฉันใช้ดัชนีตัวกรองตามที่แสดงด้านล่าง แต่ไม่มีใน SQL เวอร์ชันก่อนหน้านี้! CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC ON [User] (pinNr) WHERE UserName IS NOT NULL แต่ฉันไม่คิดว่ามันมีอยู่ใน SQL Server 2005 จริงๆแล้วโพสต์บล็อกนี้ระบุว่ามีวิธีแก้ไขปัญหาโดยใช้ทริกเกอร์เพื่อตรวจสอบความไม่ซ้ำ ใครบ้างมีตัวอย่างของสิ่งนี้? หรืออาจเป็นทางเลือก? น่าเสียดายที่การอัปเกรดเป็น SQl Server 2008 ไม่ใช่ตัวเลือกสำหรับลูกค้ารายนี้ !!

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

1
ผลกระทบของการเปลี่ยนการตั้งค่าหน่วยความจำการสร้างดัชนีใน SQL Server คืออะไร
ฉันกำลังพยายามสร้างดัชนีบางตัวในฐานข้อมูล SQL Server 2008 แต่ได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้ เกี่ยวกับข่าวสาร 8606 ระดับ 17 สถานะ 1 บรรทัด 1 การดำเนินการดัชนีนี้ต้องการหน่วยความจำ 1024 KB ต่อ DOP ความต้องการทั้งหมด 2048 KB สำหรับ DOP 2 นั้นมากกว่าค่า sp_configure ของชุด 704 KB สำหรับตัวเลือกการกำหนดค่าเซิร์ฟเวอร์ขั้นสูง "ดัชนีสร้างหน่วยความจำ (KB)" เพิ่มการตั้งค่านี้หรือลด DOP และเรียกใช้แบบสอบถามอีกครั้ง ขณะนี้การตั้งค่าหน่วยความจำการสร้างดัชนีถูกตั้งค่าเป็น 794KB และหน่วยความจำขั้นต่ำต่อแบบสอบถามตั้งเป็น 1024KB ผลกระทบของการเปลี่ยนแปลงค่าเหล่านี้คืออะไร? โดยเฉพาะอย่างยิ่งเกี่ยวกับประสิทธิภาพ ฉันควรเปลี่ยนพวกเขาสร้างดัชนีและเปลี่ยนกลับหรือฉันควรตั้งเป็น 0?


1
ฉันจะรู้ได้อย่างไรว่าอัลกอริธึมการแฮ็กข้อมูล SQL Server ที่ใช้ในการถอดรหัสข้อมูลที่เข้ารหัสเมื่อใช้ฟังก์ชัน DECRYPTBYPASSPHRASE
คำถามของฉันเกี่ยวข้องกับการทดสอบต่อไปนี้สองอินสแตนซ์: อินสแตนซ์ของ SQL Server 2017 Express (Microsoft SQL Server 2017 (RTM-CU16)) อินสแตนซ์ของ SQL Server 2014 Express (Microsoft SQL Server 2014 (SP2-CU18)) ผมใช้ฟังก์ชั่นENCRYPTBYPASSPHRASEการเข้ารหัสข้อความและใช้ผลตามที่ @ciphertext สำหรับDECRYPTBYPASSPHRASE ผลการทดสอบของฉันคือ: ตามนี้แก้ไขไมโครซอฟท์ , [... ] SQL Server 2017 ใช้อัลกอริทึมการแฮช SHA2 เพื่อแฮชรหัสผ่าน SQL Server 2016 และ SQL Server เวอร์ชันก่อนหน้าใช้อัลกอริทึม SHA1 ที่ไม่ถือว่าปลอดภัยอีกต่อไป แต่จะรู้ได้อย่างไรว่าอัลกอริทึมนั้นใช้ในการเข้ารหัสข้อมูลอย่างไรหากไม่มีข้อโต้แย้งเกี่ยวกับสิ่งนั้นในฟังก์ชัน DECRYPTBYPASSPHRASE มันเป็นส่วนหนึ่งของข้อมูลที่เข้ารหัสหรือไม่? จากผลการทดสอบของฉันฉันเดาว่า SQL Server …

1
หากคอลัมน์ VARCHAR (MAX) รวมอยู่ในดัชนีค่าทั้งหมดจะถูกเก็บไว้ในหน้าดัชนีหรือไม่?
ฉันขอสิ่งนี้ด้วยความอยากรู้อยากเห็นได้รับแรงบันดาลใจจากคำถามนี้ เรารู้ว่าVARCHAR(MAX)ค่าที่ยาวกว่า 8000 ไบต์จะไม่ถูกเก็บไว้ในแถว แต่ในหน้า LOB แยกต่างหาก หลังจากนั้นการดึงแถวที่มีค่าดังกล่าวจำเป็นต้องมีการดำเนินการ IO แบบตรรกะสองอย่างหรือมากกว่านั้น เราสามารถเพิ่มVARCHAR(MAX)คอลัมน์เป็นINCLUDEd ไปยังดัชนีที่ไม่ซ้ำกันดังที่แสดงในคำถามที่เชื่อมโยง หากคอลัมน์นี้มีค่าที่มีความยาวเกิน 8000 ไบต์ค่าดังกล่าวจะยังคงถูกเก็บไว้ "แบบอินไลน์" ในหน้าดัชนีใบหรือจะย้ายไปยังหน้า LOB หรือไม่

1
การสำรองข้อมูลตรวจพบความเสียหาย แต่ CHECKDB ไม่ได้
ฉันมีฐานข้อมูลที่เมื่อฉันรันคำสั่ง backup BACKUP DATABASE [MyDatabase] TO DISK = 'G:\Backup\MyDatabase_01_01_2018.bak' WITH NOFORMAT, NOSKIP, COMPRESSION, INIT, BUFFERCOUNT = 100 ฉันได้รับข้อความแสดงข้อผิดพลาด เกี่ยวกับ 3043 ระดับ 16 สถานะ 1 บรรทัด 8 สำรอง 'MyDatabase' ตรวจพบข้อผิดพลาดในหน้า (1: 745345) ในแฟ้ม 'F: \ Data \ MyDatabase_1.ndf' ข่าวสารเกี่ยวกับ 3013, ระดับ 16, สถานะ 1, ฐานข้อมูลการสำรอง8 บรรทัดถูกยกเลิกอย่างผิดปกติ ฉันใช้ CHECKDB เต็ม แต่กลับมาสะอาด ฉันสังเกตเห็นว่าตัวเลือก …

5
ฉันจะ จำกัด ขั้นตอนการจัดเก็บ SQL ที่จะเรียกใช้ครั้งละหนึ่งคนได้อย่างไร
ฉันมีขั้นตอนการจัดเก็บที่โดยทั่วไปจะเลือกค่าจากตารางหนึ่งและแทรกลงในอีกตารางหนึ่งซึ่งเป็นการจัดเก็บลงสื่อถาวร ฉันต้องการหลีกเลี่ยงคนหลายคนไม่ให้ทำเช่นนั้นในเวลาเดียวกัน ในขณะที่กระบวนการนี้กำลังทำงานอยู่ฉันไม่ต้องการให้คนอื่นเริ่มต้นได้ แต่ฉันไม่ต้องการให้มีการทำให้เป็นอนุกรม สิ่งที่ฉันต้องการสำหรับบุคคลอื่นที่พยายามเริ่มต้นเพื่อรับข้อผิดพลาดในขณะที่ฉันกำลังเรียกใช้กระบวนการ ฉันได้ลองใช้ sp_getapplock แล้ว แต่ฉันไม่สามารถจัดการเพื่อห้ามไม่ให้บุคคลนั้นเรียกใช้โพรซีเดอร์ได้ ฉันพยายามค้นหาโพรซีเดอร์ด้วย sys.dm_exec_requests และบล็อกโพรซีเดอร์ในขณะที่มันใช้งานได้ฉันคิดว่ามันไม่เหมาะสมเพราะในบางเซิร์ฟเวอร์ฉันไม่ได้รับอนุญาตให้เรียกใช้ sys.dm_exec_sql_text (sql_handle) วิธีที่ดีที่สุดสำหรับฉันที่จะทำคืออะไร?

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