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

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

2
คอลัมน์ null อาจเป็นส่วนหนึ่งของคีย์หลักได้หรือไม่
ฉันกำลังพัฒนาฐานข้อมูล SQL Server 2012 และฉันมีคำถามเกี่ยวกับความสัมพันธ์แบบหนึ่งต่อศูนย์หรือหนึ่งวัน ฉันมีสองตารางและCodes HelperCodesรหัสอาจมีรหัสศูนย์หรือหนึ่งตัวช่วย นี่คือสคริปต์ sql เพื่อสร้างสองตารางและความสัมพันธ์: CREATE TABLE [dbo].[Code] ( [Id] NVARCHAR(20) NOT NULL, [Level] TINYINT NOT NULL, [CommissioningFlag] TINYINT NOT NULL, [SentToRanger] BIT NOT NULL DEFAULT 0, [LastChange] NVARCHAR(50) NOT NULL, [UserName] NVARCHAR(50) NOT NULL, [Source] NVARCHAR(50) NOT NULL, [Reason] NVARCHAR(200) NULL, [HelperCodeId] NVARCHAR(20) NULL, …

2
ดัชนีในคอลัมน์ที่คำนวณแล้วยังไม่สามารถค้นหาได้
ฉันมีตารางเรียกว่ามีคอลัมน์คำนวณยังคงเรียกว่าAddress Hashkeyคอลัมน์นั้นถูกกำหนดไว้แล้ว แต่ไม่แม่นยำ มันมีดัชนีที่เป็นเอกลักษณ์ของมันที่ไม่สามารถหาได้ ถ้าฉันเรียกใช้แบบสอบถามนี้คืนคีย์หลัก: SELECT @ADDRESSID= ISNULL(AddressId,0) FROM dbo.[Address] WHERE HashKey = @HashKey ฉันได้รับแผนนี้: ถ้าฉันบังคับดัชนีฉันจะได้รับสิ่งนี้ยิ่งแย่ลง: ถ้าฉันพยายามและบังคับทั้งดัชนีและการค้นหาฉันได้รับข้อผิดพลาด: ตัวประมวลผลแบบสอบถามไม่สามารถสร้างแผนแบบสอบถามได้เนื่องจากคำแนะนำที่กำหนดไว้ในแบบสอบถามนี้ ส่งแบบสอบถามอีกครั้งโดยไม่ระบุคำแนะนำใด ๆ และไม่ใช้SET FORCEPLAN นี่เป็นเพียงเพราะมันไม่แม่นยำใช่ไหม ฉันคิดว่าไม่สำคัญว่ามันจะยังคงอยู่หรือไม่? มีวิธีทำให้ดัชนีนี้ค้นหาได้โดยไม่ทำให้คอลัมน์นี้ไม่คำนวณหรือไม่ ใครบ้างมีลิงค์ไปยังข้อมูลเกี่ยวกับเรื่องนี้? ฉันไม่สามารถโพสต์การสร้างตารางจริง แต่นี่เป็นตารางทดสอบที่มีปัญหาเดียวกัน: drop TABLE [dbo].[Test] CREATE TABLE [dbo].[Test] ( [test] [VARCHAR](100) NULL, [TestGeocode] [geography] NULL, [Hashkey] AS CAST( ( hashbytes ('SHA', ( RIGHT(REPLICATE(' ', …

4
ฉันจะแปลงคีย์ในรายงานการหยุดชะงักของ SQL Server เป็นค่าได้อย่างไร
ฉันมีรายงานการหยุดชะงักที่บอกฉันว่ามีข้อขัดแย้งเกี่ยวกับ waitresource = "KEY: 9: 72057632651542528 (543066506c7c)" และฉันเห็นสิ่งนี้: <keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528"> ภายใน <resource-list> ฉันต้องการที่จะหาค่าที่แท้จริงสำหรับคีย์ (id = 12345 เป็นต้น) ฉันต้องใช้คำสั่ง SQL อะไรในการรับข้อมูลนั้น

2
ผลกระทบใดที่จะลดขนาดของคอลัมน์ varchar ที่มีต่อไฟล์ฐานข้อมูล
เรามีตารางจำนวนหนึ่งในฐานข้อมูลของเราที่มีVARCHAR(MAX)คอลัมน์ที่VARCHAR(500)(หรือบางสิ่งที่เล็กกว่ามาก) จะพอเพียง โดยธรรมชาติฉันต้องการทำความสะอาดสิ่งเหล่านี้และทำให้ขนาดลงไปถึงระดับที่สมเหตุสมผลยิ่งขึ้น 'วิธีการ' ที่จะทำสิ่งนี้ฉันเข้าใจ: คำถามของฉันคือสิ่งที่จะแก้ไขคอลัมน์เหล่านี้ทำในหน้าและที่มีอยู่ในดิสก์? (มีข้อมูลมากมายเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณขยายคอลัมน์ แต่มีปัญหาในการค้นหาข้อมูลเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณย่อขนาด) ตารางบางตัวมีจำนวนแถวน้อยมากดังนั้นฉันจึงไม่กังวลเกี่ยวกับค่าใช้จ่ายในการเปลี่ยนแปลง แต่บางตารางมีขนาดค่อนข้างใหญ่และฉันกังวลว่าอาจมีการจัดระเบียบใหม่และทำให้การบล็อก / การหยุดทำงานเป็นจำนวนมาก ในทางปฏิบัติฉันต้องการวิธีประมาณหน้าต่างการบำรุงรักษา โดยทั่วไปฉันต้องการทำความเข้าใจให้ดีขึ้นว่าเอ็นจิ้นฐานข้อมูลทำงานอย่างไรในกรณีนี้ ขอบคุณล่วงหน้า! แก้ไข: ฉันมีตาราง 20 ตารางที่ฉันดู แต่มีเพียงครึ่งหนึ่งเท่านั้นที่มีจำนวนแถวมากกว่า 1,000 ใหญ่ที่สุดมีเกือบล้านแถว ผู้กระทำความผิดที่เลวร้ายที่สุดคือตารางที่มี 350,000 แถวและสี่VARCHAR(MAX)คอลัมน์ที่สามารถหดได้ถึงVARCHAR(500)ระดับ

3
วิธีรับการใช้งาน CPU ตามฐานข้อมูลสำหรับอินสแตนซ์เฉพาะ
ฉันพบข้อความค้นหาต่อไปนี้เพื่อตรวจจับการใช้งาน CPU ตามฐานข้อมูล แต่มีการแสดงผลลัพธ์ที่แตกต่าง: WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], …

3
รับจำนวนการตรวจสอบและจำนวนการพิมพ์จากข้อมูลการสูญเสียผลเสมอ
ฉันทำSQL Fiddleสำหรับคำถามนี้ถ้านั่นทำให้ทุกคนง่ายขึ้น ฉันมีฐานข้อมูลกีฬาแนวแฟนตาซีและสิ่งที่ฉันพยายามคิดคือทำอย่างไรกับข้อมูล "แนวปัจจุบัน" (เช่น 'W2' หากทีมชนะการแข่งขัน 2 นัดสุดท้ายหรือ 'L1' หากพวกเขาแพ้ นัดสุดท้ายของพวกเขาหลังจากชนะนัดก่อนหน้า - หรือ 'T1' ถ้าพวกเขาเสมอนัดล่าสุด นี่คือสคีมาพื้นฐานของฉัน: CREATE TABLE FantasyTeams ( team_id BIGINT NOT NULL ) CREATE TABLE FantasyMatches( match_id BIGINT NOT NULL, home_fantasy_team_id BIGINT NOT NULL, away_fantasy_team_id BIGINT NOT NULL, fantasy_season_id BIGINT NOT NULL, fantasy_league_id BIGINT NOT NULL, fantasy_week_id …

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

4
วิธีการเปลี่ยนแปลงหรืออัปเดตการเชื่อมต่อเซิร์ฟเวอร์ท้องถิ่นในงานแผนการบำรุงรักษา
สองวันหลังลูกค้าของเราเปลี่ยนชื่อเซิร์ฟเวอร์ Dev ของเรา หลังจากเปลี่ยนชื่อเซิร์ฟเวอร์แล้วงานบำรุงรักษาของฉันและงานอื่นทั้งหมดจะล้มเหลวเนื่องจากชื่อเซิร์ฟเวอร์ไม่ตรงกัน เรากำลังใช้เวอร์ชันsql server 2012และเซิร์ฟเวอร์ 2008 OS ดังนั้นเช้าวันนี้ฉันจึงเปลี่ยนชื่อเซิร์ฟเวอร์ SQL ของฉันเป็นชื่อที่ได้รับการอัพเดตและสร้างตาราง ฉันพยายามอัปเดตการเชื่อมต่อเซิร์ฟเวอร์ภายในในงานบำรุงรักษา แต่ไม่สามารถแก้ไขได้ จากนั้นฉันเพิ่มการเชื่อมต่อเซิร์ฟเวอร์ใหม่ยังคงไม่มีประโยชน์ฉันได้รับข้อผิดพลาดด้านล่างขณะดำเนินงาน หลังจากที่ฉันลองกับหน้าเป้าหมายในตัวเลือกคุณสมบัติงานมีเฉพาะเซิร์ฟเวอร์เป้าหมายเท่านั้นที่ถูกเลือกและเซิร์ฟเวอร์เป้าหมายหลายตัวถูกปิดใช้งาน ข้อผิดพลาดด้านล่าง ดำเนินการในฐานะผู้ใช้: NT Service \ SQLSERVERAGENT Microsoft (R) SQL Server Execute Package Utility เวอร์ชัน 11.0.2100.60 สำหรับ 64- บิตลิขสิทธิ์ (C) Microsoft Corporation สงวนลิขสิทธิ์. เริ่มต้น: 12:01:28 AM ข้อผิดพลาด: 2013-12-16 00: 01: 43.98 รหัส: 0xC00291EC ที่มา: {410F7661-F71A-4B68-9584-BA422AB00F02} …

3
SQL Server ไม่ได้ใช้คอร์ / เธรดของ CPU ทั้งหมด
หลังจากอัปเกรดฮาร์ดแวร์ของ SQL Server ของเราเราสังเกตเห็นในตัวจัดการงานของ Windows ว่าอินสแตนซ์ SQL นั้นใช้เพียงครึ่งหนึ่งของเธรดที่มีให้: . เซิร์ฟเวอร์มีฮาร์ดแวร์และซอฟต์แวร์ต่อไปนี้: Windows 2008 R2 Enterprise 64 บิต SP1 Intel Xeon E7-4870 - โปรเซสเซอร์ 4 ตัว (40 คอร์, 80 เธรด) Microsoft SQL Server 2012 Enterprise Edition (64 บิต) วิ่งselect cpu_count from sys.dm_os_sys_infoกลับ 40 ระบบปฏิบัติการเห็น 80 กระทู้ทั้งหมด เหตุใดจึงใช้กำลังการประมวลผลของเซิร์ฟเวอร์เพียงครึ่งเดียว เรามีฮาร์ดแวร์และซอฟต์แวร์เดียวกันบนเซิร์ฟเวอร์สองเครื่องและทั้งคู่มีพฤติกรรมเหมือนกัน

3
การปรับลำดับชั้นของ CTE ให้เหมาะสม
อัปเดตด้านล่าง ฉันมีตารางบัญชีที่มีสถาปัตยกรรมบัญชี acct / parent โดยทั่วไปเพื่อแสดงลำดับชั้นของบัญชี (SQL Server 2012) ฉันสร้างมุมมองโดยใช้ CTE เพื่อตัดลำดับชั้นและโดยรวมแล้วทำงานได้อย่างสวยงามและตามที่ตั้งใจไว้ ฉันสามารถสอบถามลำดับชั้นได้ทุกระดับและดูสาขาได้อย่างง่ายดาย มีฟิลด์ตรรกะทางธุรกิจหนึ่งฟิลด์ที่จำเป็นต้องส่งคืนเป็นฟังก์ชันของลำดับชั้น ฟิลด์ในแต่ละบัญชีบันทึกอธิบายขนาดของธุรกิจ (เราจะเรียกว่า CustomerCount) ตรรกะที่ฉันต้องการในการรายงานความต้องการในการสะสม CustomerCount จากสาขาทั้งหมด กล่าวอีกนัยหนึ่งเมื่อได้รับบัญชีฉันต้องสรุปยอดเงินของลูกค้าสำหรับบัญชีนั้นพร้อมกับเด็กทุกคนในทุกสาขาด้านล่างบัญชีตามลำดับชั้น ฉันคำนวณฟิลด์สำเร็จโดยใช้ฟิลด์ลำดับชั้นที่สร้างขึ้นภายใน CTE ซึ่งดูเหมือน acct4.acct3.acct2.acct1 ปัญหาที่ฉันพบคือทำให้มันทำงานได้เร็ว หากไม่มีฟิลด์คำนวณนี้แบบสอบถามจะทำงานใน ~ 3 วินาที เมื่อฉันเพิ่มในเขตข้อมูลจากการคำนวณมันจะกลายเป็นแบบสอบถาม 4 นาที นี่คือรุ่นที่ดีที่สุดที่ฉันสามารถพบได้เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง ฉันกำลังมองหาแนวคิดในการปรับโครงสร้างมุมมองนี้โดยไม่ต้องเสียสละอย่างมากต่อการแสดง ฉันเข้าใจเหตุผลที่สิ่งนี้ช้าลง (ต้องคำนวณภาคแสดงในส่วนคำสั่งที่ไหน) แต่ฉันไม่สามารถคิดวิธีอื่นในการจัดโครงสร้างและยังได้ผลลัพธ์เดียวกัน นี่คือตัวอย่างรหัสบางส่วนเพื่อสร้างตารางและทำ CTE ให้ตรงตามที่ใช้ในสภาพแวดล้อมของฉัน Use Tempdb go CREATE TABLE dbo.Account ( Acctid varchar(1) …

6
SQL Server 2012 ช้ากว่า 2008
ฉันย้ายเว็บไซต์ขนาดใหญ่และฐานข้อมูลจากเซิร์ฟเวอร์เก่า (Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHz Quad Core / ดิสก์ SAS) ไปยังเซิร์ฟเวอร์รุ่นใหม่ที่ดีกว่ามาก (Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16 คอร์โปรเซสเซอร์ / ดิสก์ SSD) ฉันแยกไฟล์ฐานข้อมูลบนเซิร์ฟเวอร์เก่าคัดลอกและแนบไฟล์บนเซิร์ฟเวอร์ใหม่ ทุกอย่างเป็นไปด้วยดี หลังจากนั้นฉันเปลี่ยนเป็นระดับความเข้ากันได้เป็น 110 สถิติที่อัปเดตสร้างดัชนีใหม่ สำหรับความผิดหวังครั้งใหญ่ของฉันฉันสังเกตว่าการสืบค้น sql ส่วนใหญ่นั้นช้ากว่ามาก …

3
เหตุใดจึงมีแผนปฏิบัติการแตกต่างกันระหว่าง OFFSET … FETCH และแบบ ROW_NUMBER แบบเก่า
OFFSET ... FETCHรุ่นใหม่แนะนำด้วย SQL Server 2012 เสนอการเพจที่ง่ายและเร็วขึ้น ทำไมจึงมีความแตกต่างใด ๆ เมื่อพิจารณาว่าทั้งสองรูปแบบมีความหมายเหมือนกันและเป็นเรื่องธรรมดามาก? ใครจะสันนิษฐานว่าเครื่องมือเพิ่มประสิทธิภาพรับรู้ทั้งสองและเพิ่มประสิทธิภาพพวกเขา (เล็กน้อย) อย่างเต็มที่ นี่เป็นกรณีที่ง่ายมากซึ่งOFFSET ... FETCHเร็วกว่าประมาณ 2 เท่าตามประมาณการต้นทุน SELECT * INTO #objects FROM sys.objects SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY object_id) r FROM #objects ) x WHERE r >= 30 AND r < (30 + 10) …


1
ประโยชน์ของการใช้ WITH TABLOCK บน INSERT
ในบางกรณีการทำINSERT INTO <tablename> (WITH TABLOCK)จะเร็วขึ้นเนื่องจากการบันทึกขั้นต่ำ สถานการณ์เหล่านั้นรวมถึงการมีฐานข้อมูลในBULK_LOGGEDรูปแบบการกู้คืน มีประโยชน์ด้านประสิทธิภาพที่เป็นไปได้อื่น ๆ ที่จะใช้WITH TABLOCKในINSERTตารางว่างเปล่าเมื่อฐานข้อมูล ( tempdb ) กำลังใช้SIMPLEโมเดลการกู้คืนหรือไม่? ฉันทำงานกับ SQL Server 2012 Standard Edition กรณีการใช้งานของฉันใช้สำหรับการสร้างและจากนั้นสร้างตารางชั่วคราวภายในโพรซีเดอร์ที่เก็บไว้โดยใช้INSERT...SELECT, ซึ่งอาจมีแถวได้มากถึงสองสามล้านแถว ฉันพยายามหลีกเลี่ยงการใช้tempdb ในทางที่ผิด แต่บางครั้งก็จำเป็น TABLOCKฉันพยายามที่จะสร้างกรณีที่จะต้องใช้ ดูเหมือนว่ามันจะไม่ทำร้ายอะไรและอาจมีประโยชน์ ฉันพยายามที่จะคิดออกว่ามีประโยชน์พอที่จะเพิ่มได้ทุกที่ในฐานรหัสของเราหรือไม่ซึ่งฉันแน่ใจว่าไม่มีกระบวนการอื่นที่ต้องการเขียนลงในตาราง ฉันมักจะแทรกลงในตารางชั่วคราวที่สร้างขึ้นใหม่ด้วย PK แบบคลัสเตอร์ แต่บางครั้งก็ใช้กอง

5
SQL Server Isnull ส่งคืน 1900-01-01 เมื่อเขตข้อมูลเป็นศูนย์
โค้ดต่อไปนี้จะคืนค่า 1900-01-01 เมื่อฟิลด์ DOB เป็นโมฆะ ฉันต้องการ (และคาดว่า) มันจะคืนค่าสตริงว่าง ('') แต่ไม่ใช่ ฉันจะดำเนินการเพื่อให้ได้ผลลัพธ์ที่ต้องการได้อย่างไร isnull(convert(date,DOB,1),'')

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