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

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

2
เคสที่มีหลายเงื่อนไข
ฉันต้องการเปลี่ยนค่าที่ส่งคืนจากคำสั่ง select ตามเงื่อนไขหลายประการ ฉันลองอะไรแบบนั้น ,CASE i.DocValue WHEN 'F2' AND c.CondCode IN ('ZPR0','ZT10','Z305') THEN c.CondVal ELSE 0 END as Value ทำไมมันไม่ทำงานและวิธีที่แนะนำให้ทำคืออะไร? จะมีหลายเงื่อนไขเมื่อถัดไป ขอขอบคุณ
14 sql-server 

2
พฤติกรรมของ Varchar มีช่องว่างในตอนท้าย
เมื่อฉันใช้ Varchar กับช่องว่างมันจะละเว้นช่องว่างที่ท้าย อดีต: declare @X varchar(50) นี้... set @X= 'John' ... เหมือนกับ ... set @X= 'John ' มันถือว่าสิ่งเหล่านี้จะเท่ากัน ฉันจะทำให้ระบบรับรู้สิ่งเหล่านี้แตกต่างกันอย่างไร

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

5
สิทธิ์ใดที่จำเป็นสำหรับการตัดทอนตาราง
ฉันมีบัญชี SQL ที่มีสิทธิ์ต่อไปนี้ในฐานข้อมูล: db_executorบทบาทที่คุณเห็นบัญชีนี้เป็นสมาชิกของถูกสร้างขึ้นโดยสคริปต์นี้: CREATE ROLE [db_executor] AUTHORIZATION [dbo] GO GRANT EXECUTE TO [db_executor] GO เมื่อผมทำงานselect, update, insertหรือdeleteบนโต๊ะทำงานดี เมื่อฉันลองtruncateโต๊ะมันทำให้ฉันเกิดข้อผิดพลาดนี้: ไม่พบวัตถุ "TableName" เนื่องจากไม่มีอยู่หรือคุณไม่มีสิทธิ์ใช้งาน บัญชีนี้ได้รับอนุญาตอะไรหายไป?

1
การค้นหาการพึ่งพาบนคอลัมน์เฉพาะ (วิธีที่ทันสมัยโดยไม่ต้องใช้ sysdepends)
ฉันต้องการค้นหาขั้นตอนการดูและการจัดเก็บทั้งหมดที่ใช้ไม่ใช่เฉพาะตารางบางตัวเท่านั้น แต่ยังมีคอลัมน์เฉพาะในตารางด้วย "ดูเหมือนว่า" ต่อไปนี้ใช้งานได้ แต่มีคำเตือนมากมายที่ต้องระวังด้วยวิธีนี้ (ไม่น่าเชื่อถือด้วยเหตุผลหลายประการที่จะเลิกเร็ว ๆ นี้ ฯลฯ ): SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName, (SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type FROM sysobjects so INNER JOIN syscolumns sc ON so.id = sc.id INNER JOIN sysdepends sd ON so.id = sd.depid and sc.colid = sd.depnumber …
14 sql-server 

3
วิธีที่ดีที่สุดในการรักษาขนาดล็อกไฟล์ SQL
ฉันค่อนข้างจะเป็น DBA ใหม่และฉันกำลังจัดการอินสแตนซ์ SQL Server 2012 ที่มีจำนวนกิจกรรมพอสมควร ฉันกำลังทำงานในโหมดการกู้คืนเต็มเพราะเราต้องการการกู้คืนเวลา ตอนนี้ฉันกำลังสำรองข้อมูลทั้งหมดของฐานข้อมูลและบันทึกทุกวันเวลาตีห้า ไฟล์บันทึกบางไฟล์มีขนาดสูงถึง 300GB และแม้หลังจากทำการสำรองข้อมูลไฟล์ก็จะไม่ลดขนาดลง ฉันสามารถทำให้พวกเขาลดขนาดได้โดยใช้สิ่งที่คล้ายกับ: BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn'; DBCC ShrinkFile([db1_log], 0); เมื่อฉันตรวจสอบ LSN ของไฟล์สำรองข้อมูลฉันเห็นสิ่งที่ชอบ: RESTORE headeronly FROM DISK …

1
การประมาณค่าСardinalityของภาคที่ครอบคลุมบางส่วน
ในขณะนี้ฉันกำลังพยายามหาวิธีที่ SQL Server จะประเมินความสำคัญของช่วงของเพรดิเคตที่ครอบคลุมขั้นตอนฮิสโตแกรมบางส่วน บนอินเทอร์เน็ตด้วยความคิดเชิงสถิติสำหรับการคำนวณแบบตามลำดับขั้นและสถิติที่มีค่าฉันพบคำถามที่คล้ายกันและ Paul White ให้คำตอบที่น่าสนใจ ตามคำตอบของ Paul สูตรการประมาณค่า cardinality สำหรับ predicates> = และ> (ในกรณีนี้ฉันสนใจเฉพาะรุ่นตัวประมาณ Cardinality อย่างน้อย 120) ดังนี้: สำหรับ>: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * (F * (DISTINCT_RANGE_ROWS - 1))) สำหรับ> =: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * ((F * (DISTINCT_RANGE_ROWS - 1)) + 1)) ฉันทดสอบแอปพลิเคชันของสูตรเหล่านี้ในตาราง[การผลิต]. [TransactionHistory]ตารางของฐานข้อมูลAdventureWorks2014ตามกริยาช่วงโดยใช้คอลัมน์TransactionDateและช่วงวันที่และเวลาระหว่าง …

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

1
ทำไม RX-X lock นี้ไม่ปรากฏใน Extended Events?
ปัญหา ฉันมีคู่ของคำสั่งที่ทำให้เกิดการล็อค RX-X อย่างไรก็ตามเมื่อฉันใช้ Extended Events เพื่อดูการได้มาของการล็อคการได้รับ RX-X lock ไม่เคยปรากฏขึ้นมันจะออกมาเท่านั้น มันมาจากไหน? Repro นี่คือตารางของฉัน: CREATE TABLE dbo.LockTest ( ID int identity, Junk char(4) ) CREATE CLUSTERED INDEX CX_LockTest --not unique! ON dbo.LockTest(ID) --preload some rows INSERT dbo.LockTest VALUES ('data'),('data'),('data') นี่คือชุดปัญหาของฉัน: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRAN INSERT dbo.LockTest VALUES ('bleh') …

1
การตรวจสอบทางกายภาพเท่านั้นล้มเหลว แต่เต็มไปด้วยความสำเร็จ
ฉันกำลังดำเนินการ checkdb พร้อมตัวเลือก physical_only และล้มเหลวโดยมีข้อผิดพลาดหลายอย่างเช่นด้านล่าง: ข่าวสารเกี่ยวกับ 8965 ระดับ 16 สถานะ 1 บรรทัด 1 ข้อผิดพลาดของตาราง: ID วัตถุ 1557580587, ดัชนี ID 1, ID พาร์ติชัน 72057594088456192, ID หน่วยจัดสรร 72057594177454080 (พิมพ์ข้อมูลในแถว) โหนดข้อมูลแบบปิดแถวที่หน้า (1: 13282192), ช่อง 3, ข้อความ ID 6370769698816 ถูกอ้างอิงโดยหน้า (0: 0), ช่อง 0 แต่ไม่เห็นในการสแกน ข่าวสารเกี่ยวกับ 8965 ระดับ 16 สถานะ 1 บรรทัด 1 ข้อผิดพลาดของตาราง: …

2
การแสดงแผนการดำเนินการโดยประมาณจะสร้าง CXPACKET, PAGELATCH_SH และ LATCH_EX [ACCESS_METHODS_DATASET_PARENT] รอ
ผมใช้ Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) ใน 4 vCPU VM กับmax degree of parallelismชุด2และชุดcost threshold for parallelism50 ในตอนเช้าเมื่อพยายามแสดงแผนการดำเนินการโดยประมาณสำหรับคิวรีแบบเลือก TOP 100ฉันพบว่าต้องรอเป็นจำนวนมากและการดำเนินการเพื่อแสดงแผนโดยประมาณใช้เวลาไม่กี่นาทีบ่อยครั้งในช่วง 5 - 7 นาที อีกครั้งนี้ไม่ได้ปฏิบัติจริงของแบบสอบถามนี้เป็นเพียงกระบวนการเพื่อแสดงแผนการดำเนินการโดยประมาณ sp_WhoIsActiveจะแสดงPAGEIOLATCH_SHรอหรือLATCH_EX [ACCESS_METHODS_DATASET_PARENT]รอและเมื่อฉันเรียกใช้สคริปต์WaitingTasks.sql ของ Paul Randalในระหว่างการดำเนินการก็จะแสดงการCXPACKETรอด้วยเธรดผู้ทำงานที่แสดงการPAGEIOLATCH_SHรอ: * ฟิลด์คำอธิบายทรัพยากร = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen เธรดผู้ปฏิบัติงานดูเหมือนจะนำstatsตารางทั้งหมดมาไว้ในหน่วยความจำ (เช่นหมายเลขหน้าเหล่านั้นรวมถึงหมายเลขหน้าถัดไปที่แสดงจากแบบสอบถามของ Paul Randal กลับไปยังคีย์คลัสเตอร์สำหรับstatsตาราง) เมื่อแผนกลับมามันเป็นช่วงเวลาที่เหลือของวันทันทีหลังจากที่ฉันเห็นการstatsขัดสีส่วนใหญ่ของตารางจากแคชที่มีเพียงระเบียนต่าง ๆ ที่เหลืออยู่เท่านั้น …

1
SQL Server 2017 รวมถึงเวอร์ชันที่เก่ากว่ารองรับขนาดเซกเตอร์ของดิสก์หรือไม่
ดิสก์ (ใช้คำพูดอย่างหลวม ๆ เพื่อไม่เพียงรวมสื่อการหมุนเท่านั้น แต่สื่อที่ไม่ใช่การหมุน [SSD, NVMe ฯลฯ ]) ไดรฟ์ยังคงพัฒนาอย่างต่อเนื่องในรูปแบบและฮาร์ดแวร์พื้นฐาน ส่วนนี้เป็น "การปรับปรุง" จากขนาดเซกเตอร์กายภาพ 512 ไบต์เป็นขนาดเซกเตอร์กายภาพ 4k ซึ่งเปลี่ยนเค้าโครงบนดิสก์ (512n, 512e, 4kn) วิวัฒนาการต่อไปนี้ใช้ขนาดเซกเตอร์กายภาพ 8k ซึ่งผู้ผลิตบางรายเริ่มผลิตและตั้งค่าในการผลิต ระบุขั้นตอนต่อไปนี้ดิสก์ขนาดเซ็กเตอร์ 8k ได้รับการสนับสนุนใน Windows หรือไม่ SQL Server ใส่ใจกับขนาดเซกเตอร์หรือไม่

1
SET NOCOUNT ข้อผิดพลาดในการจัดการการโทร SQL หลังจากอัพเกรด
เรากำลังอัพเกรดสภาพแวดล้อมการทดสอบของเราด้วยเซิร์ฟเวอร์ใหม่และ Microsoft SQL Server รุ่นที่ปรับปรุงแล้วและพบปัญหา บนเซิร์ฟเวอร์ใหม่รหัสเก่าของเราจะได้รับ "การดำเนินการไม่ได้รับอนุญาตเมื่อวัตถุถูกปิด" เมื่อดำเนินการขั้นตอนการจัดเก็บบางอย่าง ข้อความนี้ไม่เคยปรากฏบนเซิร์ฟเวอร์เก่า เมื่อเราติดตามมันปัญหาสามารถแก้ไขได้โดยการเพิ่มSET NOCOUNT ON;ขั้นตอนการจัดเก็บ ฉันดูค่าเริ่มต้นในฐานข้อมูลและไม่เห็นการตั้งค่าที่แตกต่าง (SQL Server 2008 เทียบกับ SQL Server 2014) ที่เกี่ยวข้องกับค่าเริ่มต้น ฉันควรตั้งค่าแบบใดเพื่อแก้ไขปัญหานี้ทั่วโลกโดยไม่จำเป็นต้องเพิ่มSET NOCOUNT ONโปรแกรมที่เก็บไว้เป็นพันรายการ

1
ดัชนีที่บีบอัด SQL Server ยังคงถูกบีบอัดในการสร้างใหม่โดยไม่ระบุการบีบอัดข้อมูลหรือไม่
หลังจากสร้างดัชนี SQL Server อีกครั้งโดยใช้การบีบอัดหน้า ( ALTER INDEX IX1 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)) ให้ทำการสร้างใหม่ในภายหลัง (ตามที่สคริปต์การบำรุงรักษาบางรายการผ่านเกณฑ์การแตกแฟรกเมนต์) จำเป็นต้องระบุการบีบอัดข้อมูลอีกครั้งหรือไม่ มิฉะนั้นดัชนีจะแตกอย่างมีประสิทธิภาพหรือไม่

2
การเรียกคืนหน้าเว็บออนไลน์ที่มีจำนวนการ จำกัด 1,000 ครั้ง
ฉันได้รับมอบหมายให้พยายามกู้คืนฐานข้อมูลที่ประสบจากความเสียหาย (เนื่องจากความล้มเหลวของ I / O ซึ่งได้รับการแก้ไขตั้งแต่) ฉันไม่คุ้นเคยกับฐานข้อมูลหรือสิ่งที่มีอยู่ ฉันได้รับการสำรองข้อมูลเต็มรูปแบบเก่า (~ 3 สัปดาห์) และชุดบันทึกธุรกรรม ... แต่มีบันทึกธุรกรรมขาดหายไปดังนั้นฉันสามารถกู้คืนได้จนถึงวันที่กำหนด ข้อมูลหายไป 2.5 สัปดาห์ (และมีข้อมูลจำนวนมากถูกเพิ่มลงในฐานข้อมูลนี้อย่างต่อเนื่อง) ฉันยังได้รับสำเนาของฐานข้อมูลที่เสียหาย (ซึ่งสามารถเข้าถึงได้ แต่มีหลายหน้าเสียหาย / ขาดหายไป) ฉันได้ลองDBCC CHECKDBคำสั่งทั่วไป(ยังไม่repair_allow_data_lossว่าจะเป็นทางเลือกสุดท้ายของฉันถ้าไม่มีอะไรทำงาน) หลังจากหลายคนมาและไปที่ฐานข้อมูล (db ​​เป็นสัตว์ประหลาดตัวเล็ก ๆ 1.5 เทราไบต์และทุกอย่างที่ฉันทำช้าและใช้เวลาสักครู่) ฉันพยายามทำการกู้คืนหน้าออนไลน์จากการสำรองข้อมูลที่ดีที่รู้จักล่าสุดสำหรับเพจที่เสียหาย ในการทำเช่นนั้นฉันได้ทำสคริปต์ที่สร้างRESTORE DATABASE <foo> PAGE='pages' FROM DISK='<bar.bak>'คำสั่งจำนวนมากจากDBCC CHECKDBผลลัพธ์ (โดยปกติ regex และแตกต่างกันไป) ... ดีมากจนถึงตอนนี้มันใช้งานได้จนถึงจุดที่บอกว่าฉันมีจำนวนหน้าถึง 1,000 หน้า ต่อไฟล์ (มี 8 ไฟล์ใน …

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