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

SQL Server 2012 (รุ่นบิลด์หลัก 11.00.xxxx) โปรดติดแท็ก sql-server ด้วย

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

5
สถาปัตยกรรมดัชนีที่เหมาะสมคืออะไรเมื่อถูกบังคับให้ใช้ IsDeleted (การลบแบบอ่อน)?
ขณะนี้เรามีฐานข้อมูลและแอปพลิเคชันที่มีอยู่ซึ่งทำงานได้อย่างสมบูรณ์ ฉันไม่มีความสามารถในการเปลี่ยนสถาปัตยกรรม ณ จุดนี้ วันนี้แต่ละตารางในฐานข้อมูลมีฟิลด์ "IsDeleted" NOT NULL BIT ที่มีค่าเริ่มต้นเป็น '0' เมื่อแอปพลิเคชัน "ลบ" ข้อมูลมันเพียงอัปเดตการตั้งค่าสถานะ IsDeleted เป็น 1 สิ่งที่ฉันมีปัญหาในการทำความเข้าใจคือดัชนีของแต่ละตารางควรมีโครงสร้างอย่างไร ตอนนี้ทุกแบบสอบถาม / เข้าร่วม / ฯลฯ จะดำเนินการตรวจสอบ IsDeleted เป็นมาตรฐานที่นักพัฒนาของเราต้องปฏิบัติตาม ที่ถูกกล่าวว่าฉันพยายามที่จะตรวจสอบว่าดัชนีคีย์หลักคลัสเตอร์ทั้งหมดของฉันในแต่ละตารางจะต้องมีการเปลี่ยนแปลงเพื่อให้รวมถึงคีย์หลักและฟิลด์ BIT IsDeleted นอกจากนี้เนื่องจากทุกแบบสอบถาม / เข้าร่วม / ฯลฯ ต้องใช้การตรวจสอบ IsDeleted เป็นข้อสมมติฐานที่เหมาะสมหรือไม่ที่ดัชนีทุกเดียว (ไม่ใช่คลัสเตอร์ด้วย) ควรรวมเขตข้อมูล IsDeleted เป็นเขตข้อมูลแรกของดัชนีหรือไม่ อีกคำถามหนึ่งที่ฉันมีคือดัชนีรอบตัวกรอง ฉันเข้าใจว่าฉันสามารถใส่ตัวกรองในดัชนีเช่น "WHERE IsDeleted = 0" เพื่อลดขนาดของดัชนี อย่างไรก็ตามเนื่องจากการเข้าร่วม / …

3
ผลกระทบของการเปลี่ยนโหมดความเข้ากันได้ใน SQL Server จาก 100 เป็น 110
ฉันมีฐานข้อมูลที่Mydatabaseสร้างขึ้นใน SQL Server 2008 R2 ฉันได้อัพเกรดเป็น SQL Server 2012 ฉันพยายามเรียกใช้แบบสอบถามด้านล่างเพื่อคำนวณเปอร์เซ็นต์ไทล์ select Distinct [KEY],PERCENTILE_CONT(0.25) within group(order by EachPrice) OVER(Partition By [KEY]) As Q1,PERCENTILE_CONT(0.50) within group(order by EachPrice) OVER(Partition By [KEY]) As Q2, PERCENTILE_CONT(0.75) within group(order by EachPrice) OVER(Partition By [KEY]) As Q3, PERCENTILE_CONT(1) within group(order by EachPrice) OVER(Partition By [KEY]) As …

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

3
การตัดคำค้นหาใน IF EXISTS ทำให้ช้ามาก
ฉันมีแบบสอบถามด้านล่าง: select databasename from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt' and not exists(select 1 from dbo.smalltable c where c.source=l.source) แบบสอบถามด้านบนเสร็จสมบูรณ์ในสามวินาที หากเคียวรีด้านบนคืนค่าใด ๆ เราต้องการให้โพรซีเดอร์ที่เก็บไว้เป็น EXIT ดังนั้นฉันจึงเขียนมันใหม่ด้านล่าง: If Exists( select databasename from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt' and not exists(select 1 from dbo.smalltable c where c.source=l.source) ) …

1
ทำไมการเพิ่มคอลัมน์ NOT NULL ด้วยข้อ จำกัด เริ่มต้นทันที?
CREATE TABLE TestTab (ID INT IDENTITY(1,1), st nvarchar(100)) INSERT INTO TestTab (st) values ('a') INSERT INTO TestTab (st) values ('b') INSERT INTO TestTab (st) values ('c') INSERT INTO TestTab (st) values ('d') INSERT INTO TestTab (st) values ('e') INSERT INTO TestTab (st) SELECT TOP 10000 st from testtab GO 30 …

3
ทำไม SQL Server จะไม่สนใจดัชนี
ผมมีตารางCustPassMasterที่มี 16 คอลัมน์ในนั้นซึ่งเป็นหนึ่งและฉันสร้างดัชนีCustNum varchar(8) IX_dbo_CustPassMaster_CustNumเมื่อฉันเรียกใช้SELECTคำสั่งของฉัน: SELECT * FROM dbo.CustPassMaster WHERE CustNum = '12345678' จะละเว้นดัชนีอย่างสมบูรณ์ สับสนนี้ฉันเป็นฉันมีตารางอีกCustDataMasterด้วยวิธีการคอลัมน์อื่น ๆ (55) CustNum varchar(8)ซึ่งหนึ่งในนั้นคือ ฉันสร้างดัชนีในคอลัมน์นี้ ( IX_dbo_CustDataMaster_CustNum) ในตารางนี้และใช้แบบสอบถามเดียวกันจริง: SELECT * FROM dbo.CustDataMaster WHERE CustNum = '12345678' และใช้ดัชนีที่ฉันสร้างขึ้น มีเหตุผลเฉพาะที่อยู่เบื้องหลังสิ่งนี้หรือไม่? ทำไมมันจะใช้ดัชนีจากCustDataMasterแต่ไม่จากCustPassMaster? มันเป็นเพราะการนับคอลัมน์ต่ำ? แบบสอบถามแรกส่งคืน 66 แถว สำหรับแถวที่สองจะส่งคืน 1 แถว นอกจากนี้หมายเหตุเพิ่มเติม: CustPassMasterมี 4991 บันทึกและCustDataMasterมี 5376 บันทึก นี่อาจเป็นเหตุผลที่ละเลยดัชนีหรือไม่ CustPassMasterยังมีระเบียนที่ซ้ำกันซึ่งมีCustNumค่าเหมือนกันเช่นกัน นี่เป็นปัจจัยอื่นหรือไม่ …

6
กำหนดวันศุกร์ที่ 3 ของทุกเดือน
ฉันต้องกำหนดวันที่ซึ่งเป็น "วันศุกร์ที่ 3 ของแต่ละเดือน" สำหรับช่วงวันที่ "1.1.1996 - 30.8.2014" ใน SQL Server ฉันคาดหวังว่าฉันควรใช้การรวมกันของDENSE_RANK()และPARTITION BY()เพื่อตั้ง "อันดับ = 3" อย่างไรก็ตามฉันใหม่กับ SQL และไม่สามารถค้นหารหัสที่ถูกต้องได้

2
SQL Server 2012 คืนค่าการสำรองข้อมูลเป็นชื่อฐานข้อมูลใหม่
ฉันดูเหมือนจะจำได้ว่าในปี 2008 คุณสามารถคืนค่าสำเนาสำรองเป็นสำเนาใหม่ของฐานข้อมูลได้โดยการเปลี่ยนชื่อในช่อง "ฐานข้อมูลปลายทาง" จากตัวช่วยสร้างการคืนค่า มันจะสร้างฐานข้อมูลใหม่ซึ่งเป็นสำเนาของฐานข้อมูลต้นฉบับที่ถูกกู้คืนไปยังจุดที่คุณต้องการ ฉันยังไม่ได้ใช้ชีวิตเพื่อหาวิธีที่จะทำให้ SQL 2012 ทำสิ่งนี้ได้ ตอนนี้ฉันเข้าใจแล้ว (ขอบคุณ Aaron Bertrand) ที่สิ่งนี้ไม่ได้เปลี่ยนไปจริง ๆ และในปี 2012 นั้นทำให้ฉันชัดเจนมากขึ้นว่ากลยุทธ์นี้เป็นความคิดที่ไม่ดีตั้งแต่แรก! ดังนั้นสิ่งที่ฉันต้องทำคือ: สร้างฐานข้อมูลใหม่ 'MyDB_Copy' จากฐานข้อมูลที่มีอยู่ 'MyDB' โดยใช้ไฟล์สำรอง เรามีการสำรองข้อมูลเต็มรูปแบบทุกคืน (.bak) และ TLog ทุก ๆ 15 นาที (.trn) ฉันไม่ต้องการให้ 'MyDB' ที่มีอยู่ได้รับผลกระทบ / สัมผัสเลยเพราะมันเป็น "สด" หลังจาก MyDB_Copy ถูกสร้างขึ้นจากไฟล์สำรองข้อมูลเต็มรูปแบบหลักฉันต้องคืนค่าข้อมูลสำรอง TLog สองสามโหลเพื่อให้ได้เวลาที่แน่นอน

7
เกิดข้อผิดพลาด 3154 ขณะกู้คืนข้อมูลสำรองโดยใช้ WITH REPLACE
ฉันติดตั้ง SQL 2012 ด้วย SP1 บนคอมพิวเตอร์ของฉันแล้ว test.bakฉันทำสำรองของฐานข้อมูล ฉันมีฐานข้อมูลที่มีชื่อtest2ซึ่งเป็นฐานข้อมูลเดียวกัน แต่ข้อมูลเปลี่ยนไป ฉันต้องการกู้คืนtest.bakผ่านtest2ฐานข้อมูล ฉันมักจะได้รับข้อผิดพลาด: ข้อผิดพลาด 3154: ชุดการสำรองข้อมูลจะมีการสำรองข้อมูลของฐานข้อมูลอื่นนอกเหนือจากฐานข้อมูลที่มีอยู่ ฉันเหนื่อย: ฉันถูก cliked test2 -> Restore database -> From device ฉันเลือกtest.bakและตรวจสอบWith Replaceแต่ฉันได้รับข้อผิดพลาด จากนั้นฉันก็พยายามคลิกขวา test2 -> Restore file and filegroups ฉันเลือกtest.bakและตรวจสอบWith Replaceแต่ฉันได้รับข้อผิดพลาด ฉันสามารถลบฐานข้อมูลเก่าของฉันแล้วคืนค่าการสำรองข้อมูลของฉันด้วยชื่อที่ถูกต้อง แต่เมื่อฉันใช้ SQL 2008 ฉันไม่มีปัญหาในการกู้คืนฐานข้อมูลที่มีอยู่ ดูเหมือนว่าตั้งแต่ฉันใช้ SQL2012 ฉันได้รับข้อผิดพลาดนี้มากมาย!


7
ฉันจะจัดการกับข้อ จำกัด FK เมื่อนำเข้าข้อมูลโดยใช้ตัวช่วยสร้างการนำเข้า / ส่งออก DTS ได้อย่างไร
ฉันพยายามใช้ตัวช่วยสร้างการนำเข้าและส่งออกเซิร์ฟเวอร์ SQL เพื่อคัดลอกข้อมูลจากฐานข้อมูลการผลิตของฉันไปยังฐานข้อมูล dev ของฉัน แต่เมื่อฉันทำมันล้มเหลวด้วยข้อผิดพลาด "การแทรก INSERT ขัดกับข้อ จำกัด ของต่างประเทศ" ฉันมีตารางมากกว่า 40 ตาราง ของข้อ จำกัด FK มีวิธีง่าย ๆ ในการจัดการกับสิ่งนี้โดยไม่ต้องเขียนข้อ จำกัด แบบหล่น / เพิ่มสคริปต์ constrat? แก้ไข: ฉันเพิ่งพบว่าในรุ่นของ SQL Server ซึ่งเป็นสิ่งที่ฉันกำลังทำงานอยู่ DTS จะไม่อนุญาตให้คุณบันทึกแพ็คเกจ

3
กำจัดตัวดำเนินการค้นหาคีย์ (เป็นกลุ่ม) ที่ทำให้ประสิทธิภาพการทำงานช้าลง
ฉันจะกำจัดตัวดำเนินการค้นหาคีย์ (เป็นกลุ่ม) ในแผนปฏิบัติการได้อย่างไร ตารางtblQuotesมีดัชนีแบบคลัสเตอร์ (เปิดQuoteID) และดัชนีที่ไม่ได้คลัสเตอร์27 รายการดังนั้นฉันจึงพยายามไม่สร้างอีกต่อไป ฉันวางคอลัมน์ดัชนีแบบคลัสเตอร์QuoteIDในแบบสอบถามของฉันโดยหวังว่าจะช่วยได้ แต่ก็ยังเหมือนเดิม แผนการดำเนินการที่นี่ หรือดูมัน: นี่คือสิ่งที่ผู้ดำเนินการค้นหาคีย์พูดว่า: ค้นหา: declare @EffDateFrom datetime ='2017-02-01', @EffDateTo datetime ='2017-08-28' SET NOCOUNT ON SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED IF OBJECT_ID('tempdb..#Data') IS NOT NULL DROP TABLE #Data CREATE TABLE #Data ( QuoteID int NOT NULL, --clustered index [EffectiveDate] [datetime] NULL, …

2
เวลารอจะสูงกว่าเวลานาฬิกาได้อย่างไร
เมื่อฉันกำลังติดตามด้วย sp_BlitzFirst ฉันจะได้รับรายละเอียดนี้: <?ClickToSeeDetails -- For 20 seconds over the last 5 seconds, SQL Server was waiting on this particular bottleneck. -- ?> ควรที่จะอ่าน "20 ครั้งในช่วง 5 วินาทีที่ผ่านมา?" การค้นหาคือ CLR_SEMAPHORE

2
SQL Server รุ่นใหม่มีเสถียรภาพน้อยลงหรือไม่
สถาปนิกฐานข้อมูลของเราบอกกับลูกค้าของเราว่า SQL Server 2014 เป็นตัวเลือกที่ไม่ดีในปี 2555 เพราะขาดประสิทธิภาพและความได้เปรียบด้านเสถียรภาพที่ 2012 มี ทุกสิ่งที่ฉันได้อ่านขัดแย้งนี้ Aaron Bertrand กล่าวว่าสิ่งที่ตรงกันข้ามและเอกสารสีขาวทั้งหมดที่ฉันได้อ่านจาก MS เห็นด้วยเช่นกัน 2014 ได้รับการปรับปรุงและแก้ไขปัญหา AG บางอย่างที่ผู้คนเคยมีในปี 2012 มีข้อเสียที่สำคัญในการเลือก 2014 ในปี 2012 ที่ฉันขาดหายไปหรือไม่?

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