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

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

4
SQL Server ล้มเหลวในการใช้ดัชนีใน bijection ง่าย
นี่เป็นปริศนาเพิ่มประสิทธิภาพการสืบค้นอีกอันหนึ่ง บางทีฉันแค่ประมาณเครื่องมือเพิ่มประสิทธิภาพข้อความค้นหาหรือบางทีฉันอาจพลาดบางสิ่ง - ดังนั้นฉันจึงวางมันไว้ที่นั่น ฉันมีโต๊ะธรรมดา CREATE TABLE [dbo].[MyEntities]( [Id] [uniqueidentifier] NOT NULL, [Number] [int] NOT NULL, CONSTRAINT [PK_dbo.MyEntities] PRIMARY KEY CLUSTERED ([Id]) ) CREATE NONCLUSTERED INDEX [IX_Number] ON [dbo].[MyEntities] ([Number]) ด้วยดัชนีและแถวบางแถวในนั้นมีNumberการกระจายอย่างเท่าเทียมกันในค่า 0, 1 และ 2 ตอนนี้แบบสอบถามนี้: SELECT * FROM (SELECT [Extent1].[Number] AS [Number], CASE WHEN (0 = [Extent1].[Number]) THEN 'one' …

3
DROP USER ใช้เวลานานเกินไปเมื่อมีผู้ใช้จำนวนมาก
บนอินสแตนซ์ SQL Server 2014 ที่มี RAM และดิสก์เร็วพอมีผู้ใช้มากกว่า 160 รายที่สามารถเข้าถึงฐานข้อมูล ด้วยเหตุผลบางอย่างที่ไม่รู้จักกับฉันการเรียกใช้คำสั่งDROP USER [username]ในฐานข้อมูลนี้ใช้เวลาสูงสุด 5 วินาทีต่อผู้ใช้หนึ่งราย การกำหนดผู้ใช้ใหม่ให้เข้าสู่ระบบและกู้คืนสิทธิ์ของพวกเขานั้นรวดเร็วมาก ภายในบริบทของการรีเฟรชฐานข้อมูล DEV จากการผลิตฉันต้องปล่อยและสร้างผู้ใช้ฐานข้อมูลทั้งหมดใหม่ ดังนั้นใช่ปล่อยผู้ใช้ฐานข้อมูลและสร้างพวกเขาเป็นสิ่งที่จำเป็น ฉันจะเร่งความเร็วDROP USERคำสั่งได้อย่างไร โปรดจำไว้ว่าฉันต้องเรียกใช้เกิน 160 ครั้งสำหรับอินสแตนซ์ที่ฉันเขียน นี่คือ SQL ที่ฉันใช้: DECLARE drop_user_cur CURSOR FOR SELECT name FROM #drop_users OPEN drop_user_cur FETCH NEXT FROM drop_user_cur INTO @user WHILE @@FETCH_STATUS = 0 BEGIN SET @sql …

1
ประโยชน์ของกลุ่มไฟล์และการตั้งค่ากลุ่มไฟล์เป็นแบบอ่านอย่างเดียว
ใครบางคนสามารถอ้างอิงสถานการณ์โลกแห่งความจริงให้ฉันเมื่อเปลี่ยนกลุ่มไฟล์หลายกลุ่มเป็นแบบอ่านอย่างเดียวเป็นตัวเลือกที่ดีและจะใช้เมื่อใด มีประโยชน์อะไรบ้างถ้าคุณตั้งให้เป็นแบบอ่านอย่างเดียว บนฐานข้อมูลที่มีหลายกลุ่มไฟล์คุณต้องสำรองข้อมูลสำหรับฐานข้อมูลทั้งหมดและสำรองไฟล์แต่ละไฟล์ของกลุ่มไฟล์นั้นหรือไม่ คุณสามารถยกตัวอย่างให้ฉันเมื่อใช้การสำรองข้อมูลกลุ่มไฟล์ได้หรือไม่ ฉันไม่เห็นว่าทำไมจึงเป็นประโยชน์ในการสำรองไฟล์กลุ่มเมื่อคุณสามารถสำรองฐานข้อมูลทั้งหมดได้ หวังว่าฉันจะได้รับประสบการณ์ในโลกแห่งความจริงที่การสำรองไฟล์ของกลุ่มนี้จะเหมาะ

1
CASE expression ส่งคืนค่าที่ผิดเมื่อใช้ CEILING
ฉันพบปัญหาที่CASEนิพจน์ไม่ส่งคืนสิ่งที่ฉันคาดหวัง ในการทดสอบฉันเพิ่มตัวแปรทศนิยมและใช้CASEนิพจน์เดียวกันกับมันและใช้งานได้ดีส่งคืนผลลัพธ์ตามที่คาดไว้ (ปัดเศษค่าขึ้นเมื่อIsGun=1แต่เมื่อฉันเรียกใช้CASEนิพจน์เดียวกันกับค่าทศนิยมอื่นมันจะส่งกลับเสมอ ค่าที่มีCEILING()ฟังก์ชั่นและจะไม่ส่งคืนค่าเดิม นี่คือรหัส SQL: DECLARE @Num decimal(8,2); set @Num = 12.54; WITH PQ AS ( SELECT UPC, Price1, DBID, AVG(Price1) OVER (PARTITION BY UPC) AS Price1Avg FROM vProducts_PriceQty_Union ) SELECT PQ.UPC, PQ.Price1, PQ.Price1Avg, (CASE WHEN p.IsGun = 1 THEN CEILING(@Num) ELSE @Num END) AS UsingVar, CAST( (CASE WHEN …

4
'Id' ที่มีรูปแบบ: YYYYNNNNNN ที่มีส่วน NNNNNN เริ่มต้นใหม่ทุกปี
ฉันมีข้อกำหนดทางธุรกิจที่แต่ละระเบียนในตารางใบแจ้งหนี้มีรหัสซึ่งดูเหมือน YYYYNNNNNNN ส่วน NNNNNN จำเป็นต้องเริ่มต้นใหม่ทุกต้นปี ดังนั้นแถวแรกที่ป้อนในปี 2559 จะมีลักษณะเป็น 2016000001 และแถวที่สองเช่น 2016000002 ฯลฯ ให้บอกว่าระเบียนสุดท้ายของปี 2559 คือ 2016123456 แถวถัดไป (ของปี 2017) ควรมีลักษณะเหมือน 2017000001 ฉันไม่ต้องการรหัสนี้เป็นคีย์หลักและฉันเก็บวันที่สร้างเช่นกัน แนวคิดคือ 'รหัสแสดง' นี้ไม่ซ้ำกัน (ดังนั้นฉันจึงสามารถค้นหาได้) และกลุ่มคนสามารถปี ไม่น่าเป็นไปได้ที่จะมีการลบบันทึกใด ๆ อย่างไรก็ตามฉันจะโน้มน้าวให้รหัสป้องกันสิ่งเช่นนั้น มีวิธีใดบ้างที่ฉันสามารถสร้าง id นี้โดยไม่ต้องค้นหา max id ในปีนี้ทุกครั้งที่มีการแทรกแถวใหม่ ไอเดีย: A CreateNewInvoiceSPซึ่งได้รับความMAXคุ้มค่าสำหรับปีนั้น (yucky) คุณลักษณะบางอย่างในตัวที่มีมนต์ขลังสำหรับการทำสิ่งนี้ (ฉันฝันได้ถูกต้อง) ความสามารถในการระบุ UDF หรือบางอย่างในIDENTITYหรือDEFAULTการประกาศ (??) มุมมองที่ใช้PARTITION OVER + ROW()(ถูกลบจะมีปัญหา) …
11 sql-server  t-sql 


3
ลำดับฟิลด์ในลำดับดัชนีคอมโพสิตที่มีการเลือกสูงและฟิลด์การเลือกต่ำ
ฉันมีตาราง SQL Server ที่มีมากกว่า 3 พันล้านแถว หนึ่งในคำถามของฉันใช้เวลานานมากดังนั้นฉันจึงพิจารณาที่จะเพิ่มประสิทธิภาพ แบบสอบถามมีลักษณะดังนี้: SELECT [Enroll_Date] ,Count(*) AS [Record #] ,Count(Distinct UserID) AS [User #] FROM UserTable GROUP BY [Enroll_Date] [Enroll_Date] เป็นคอลัมน์การเลือกต่ำที่มีค่าน้อยกว่า 50 ค่าในขณะที่คอลัมน์ UserID เป็นคอลัมน์เลือกสูงที่มีค่าแตกต่างกันมากกว่า 200 ล้านรายการ จากการวิจัยของฉันฉันเชื่อว่าฉันควรสร้างดัชนีคอมโพสิตแบบไม่รวมกลุ่มในสองคอลัมน์นี้และในทางทฤษฎีแล้วคอลัมน์การเลือกสูงควรเป็นคอลัมน์แรก แต่ฉันไม่แน่ใจว่าในกรณีของฉันจะทำงานได้เพราะฉันใช้คอลัมน์หัวกะทิต่ำในกลุ่มโดยข้อ ตารางนี้ไม่มีดัชนีคลัสเตอร์

1
วิธีการส่งออกผลลัพธ์ของ sp_AskBrent
เรามีตัวอย่างที่สุ่ม CPU ฉันต้องการสร้างการแจ้งเตือนที่ใช้ซีพียูมากกว่า 90% และเรียกงานที่ทำงานโดยอัตโนมัติsp_AskBrentและส่งอีเมลถึงฉัน อย่างไรก็ตามเอาต์พุตไม่สามารถอ่านได้ใน Text หรือ HTML output มันไม่ได้เป็นไปด้วยดีในสเปรดชีต Excel ฉันจะรับข้อมูลในรูปแบบที่อ่านได้อย่างไร

1
เหตุใดดัชนีของฉันจึงสามารถค้นหาประมาณจำนวนแถวที่ถูกต้องและตัวดำเนินการเรียงลำดับไม่ได้
ฉันมีแบบสอบถามที่ใช้ฟังก์ชันในเพรดิเคตบางอย่างเช่นนี้: commentType = 'EL' AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0) ฉันมีดัชนีตัวกรองใน commentType ที่มีแถว 40K และเมื่อฉันเรียกใช้แบบสอบถามจำนวนแถวโดยประมาณสำหรับดัชนี Seek นั้นแม่นยำมาก (ประมาณ 11K) แต่สำหรับขั้นตอนต่อไป (ตัวดำเนินการเรียงลำดับ) จะไม่สนใจสถิติและ เพียงประมาณจำนวนแถวทั้งหมดในดัชนีที่กรอง ทำไมสิ่งนี้จึงเกิดขึ้น ฉันรู้พื้นฐานเกี่ยวกับการsargabilityและฉันทดสอบเพียงเพื่อความมีสติแทน dateadd ตามวันที่จริง (2014-01-01) และ voila ... การเรียงลำดับเริ่มเดาจำนวนแถวอย่างถูกต้อง ... เหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร ฉันไม่สามารถผ่านวันที่แน่นอน ...

5
ย้อนกลับนิพจน์บูลีนซึ่งสามารถส่งคืน UNKNOWN
ตัวอย่าง ฉันมีโต๊ะ ID myField ------------ 1 someValue 2 NULL 3 someOtherValue และนิพจน์ T-SQL Boolean ซึ่งสามารถประเมินค่าเป็น TRUE, FALSE หรือ (เนื่องจากตรรกะที่ประกอบไปด้วยของ SQL) UNKNOWN: SELECT * FROM myTable WHERE myField = 'someValue' -- yields record 1 หากฉันต้องการได้รับบันทึกอื่น ๆ ทั้งหมดฉันไม่สามารถปฏิเสธการแสดงออกได้ SELECT * FROM myTable WHERE NOT (myField = 'someValue') -- yields only record 3 …

2
เหตุผลที่ดีในการใช้ SELECT ... ด้วย XLOCK
ฉันกำลังเผชิญหน้ากับการหยุดชะงักที่เกิดขึ้นอีกครั้งหนึ่งในนั้นคือ Keylock และมีการสืบค้น SELECT พร้อมคำใบ้ XLOCK ที่กลายเป็นเหยื่อการหยุดชะงัก คำสั่งอื่น ๆ คือการแทรกลงในหนึ่งในตารางที่เป็นส่วนหนึ่งของมุมมองของแบบสอบถามแรก ดู: create view dbo.viewE as select * from dbo.E where myValue > 13000 เลือกคำค้นหา: select * from dbo.viewE with (XLOCK) where A > GETUTCDATE() คำสั่ง INSERT: INSERT INTO [dbo].[E] (myValue,A) VALUES (10,GetDate()) ตารางต้นแบบ dbo.E มีพื้นที่ประมาณ 3 ล้านแถวในประมาณ 20 คอลัมน์บางส่วนเป็น ntext …

1
ทำให้ข้อมูลเก่าเป็นแบบอ่านอย่างเดียว
ในโครงการฐานข้อมูลที่ฉันกำลังทำงานอยู่มีข้อกำหนดว่า ณ เวลาใดเวลาหนึ่งข้อมูล 'เก่า' ควรเปลี่ยนเป็นแบบอ่านอย่างเดียว เป็นไปได้ใน SQL Server หรือไม่ ฉันไม่สามารถเปลี่ยนการอนุญาตตารางเนื่องจากการอนุญาตให้อ่านอย่างเดียวควรใช้กับข้อมูลที่เก่ากว่าเกณฑ์ที่กำหนดเช่นผู้ใช้ควรจะสามารถเพิ่มและแก้ไขข้อมูลที่เพิ่มหลังจากช่วงเวลานี้
11 sql-server 

5
การใช้เครื่องมือของบุคคลที่สามเพื่อสำรองข้อมูล
มีข้อดีใดบ้างที่จะใช้เครื่องมือของบุคคลที่สามในการสำรองข้อมูล ฉันไม่ได้อ้างถึงอย่างใดอย่างหนึ่ง แต่ฉันต้องการที่จะรู้ว่าถ้ามีคนใช้พวกเขาไปยัง DB มากกว่า 200 GB เซิร์ฟเวอร์ส่วนใหญ่เป็น MSSQL 2008R2, Standard และ Enterprise Editions

2
การย้ายฐานข้อมูล SQL Server ไปยังดิสก์ใหม่ขณะออนไลน์
ฉันมีฐานข้อมูลเซิร์ฟเวอร์ SQL ขนาด 1.4TB ที่พยายามอย่างหนักกับดิสก์ I / O เราได้ติดตั้งอาร์เรย์ SSD ใหม่ลงในเซิร์ฟเวอร์ที่จะแก้ปัญหาทั้งหมดของเราเราเพิ่งจะโต้วาทีวิธีที่ดีที่สุดในการย้ายฐานข้อมูลไปทั่ว เป็นการดีถ้าเราสามารถทำได้โดยไม่หยุดทำงานนั่นเป็นสิ่งที่ดีที่สุด แต่ในกรณีที่ตัวเลือกอยู่ระหว่างสองวันของประสิทธิภาพที่ไม่ดี (เช่นขณะคัดลอกข้อมูล) เมื่อเทียบกับการหยุดทำงานสองชั่วโมงตัวเลือกหลังอาจเหมาะสมกว่า จนถึงตอนนี้วิธีแก้ไขปัญหาที่เราพบคือ: คัดลอกง่าย ใช้ฐานข้อมูลออฟไลน์คัดลอกไฟล์ข้ามเปลี่ยนตำแหน่งใน SQL Server และนำกลับมาออนไลน์ ตัวเลขคร่าวๆประมาณว่าจะใช้เวลานานถึงห้าชั่วโมงซึ่งไม่เป็นที่ยอมรับจริงๆ แต่เป็นวิธีที่ง่ายที่สุด การคัดลอกระดับบล็อก การใช้ยูทิลิตีคล้าย rsync เราจะคัดลอกไฟล์ข้ามพื้นหลังในขณะที่ฐานข้อมูลกำลังทำงาน เมื่อเราพร้อมที่จะย้ายข้อมูลเราใช้ออฟไลน์ DB ทำสำเนาที่แตกต่างกันโดยใช้ยูทิลิตี้นี้จากนั้นชี้เซิร์ฟเวอร์ SQL ไปที่ไฟล์ใหม่และนำมาออนไลน์ ไม่ทราบเวลาที่นี่ เราไม่ทราบว่าต้องใช้เวลานานเท่าใดในการวิเคราะห์ความแตกต่างของ 1.4TB และคัดลอกสิ่งนั้นข้าม ข้อกังวลอื่น ๆ ของเราคือการคัดลอกระดับบล็อกจะทำให้ไฟล์ในบางสถานะไม่สามารถอ่านได้โดย SQL Server และเราจะเสียเวลา การโยกย้าย SQL สร้างไฟล์ข้อมูล SQL ขนาด 1.4TB ใหม่บนดิสก์ใหม่และปิดใช้งาน autogrowth …
11 sql-server  ssd 

1
งานไม่ทำงานตามกำหนดเวลา
ดังนั้นฉันจึงมีงานตัวแทน SQL พื้นฐานที่รันสคริปต์ Robocopy เพื่อย้ายไฟล์ทั้งหมดจากโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์หนึ่ง Job เป็นชุดพื้นฐานที่ค่อนข้างสวย ด้วยตารางพื้นฐานที่สวย และมันก็ยังไม่ได้วิ่ง ฉันไม่ได้หมายถึงการวิ่งให้สำเร็จ มีเหตุผลใด ๆ ที่เป็นเช่นนี้หรือไม่? สำหรับข้อมูลเพิ่มเติมฉันจะเขียนสคริปต์งานเช่นกัน USE [msdb] GO /****** Object: Job [MoveMantisFilesToArchive] Script Date: 12/23/2015 10:21:52 AM ******/ BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 /****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 12/23/2015 10:21:52 AM ******/ IF NOT EXISTS …

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