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

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

3
เหตุใดการเลือกคอลัมน์ผลลัพธ์ทั้งหมดของแบบสอบถามนี้จึงเร็วกว่าการเลือกคอลัมน์เดียวที่ฉันสนใจ
ฉันมีแบบสอบถามที่ใช้select *ไม่เพียง แต่อ่านน้อยลง แต่ยังใช้เวลา CPU น้อยกว่าการใช้select c.Fooอย่างมาก นี่คือแบบสอบถาม: select top 1000 c.ID from ATable a join BTable b on b.OrderKey = a.OrderKey and b.ClientId = a.ClientId join CTable c on c.OrderId = b.OrderId and c.ShipKey = a.ShipKey where (a.NextAnalysisDate is null or a.NextAnalysisDate < @dateCutOff) and b.IsVoided = 0 and …

2
ปัญหาการประมาณค่าเชิง Cardinality ของการเข้าร่วมวงใน
ฉันพยายามเข้าใจว่าทำไมการประมาณแถวจึงผิดอย่างยิ่งนี่คือกรณีของฉัน: เข้าร่วมง่าย - โดยใช้ SQL Server 2016 sp2 (ปัญหาเดียวกันใน sp1), dbcompatiblity = 130 select Amount_TransactionCurrency_id, CurrencyShareds.id from CurrencyShareds INNER JOIN annexes ON Amount_TransactionCurrency_id = CurrencyShareds.Id option (QUERYTRACEON 3604, QUERYTRACEON 2363); SQL ประมาณ 1 แถวโดยที่ 107131 และเลือกวนซ้ำซ้อนกัน ( ลิงก์ไปยังแผน ) หลังจากอัปเดตสถิติใน CurrencyShared แล้วการประมาณการก็ใช้ได้และการเลือกผสานเข้าร่วม ( ลิงก์ไปยังแผนใหม่ ) ทันทีที่มีการเพิ่มเพียงหนึ่งระเบียนใน CurrencyShareds สถิติก็จะกลายเป็น "เก่า" และ …

2
มีวิธีที่มีประสิทธิภาพในการดูสาเหตุของ "ข้อมูลสตริงหรือไบนารีจะถูกตัดทอน" หรือไม่?
นี่คือการติดตามคำถามนี้ นอกจากนี้ยังเกี่ยวข้องกับคำขอคุณลักษณะนี้จาก Microsoft อย่างไรก็ตามผ่านไปหลายปีแล้วและมีข่าวสำคัญ ๆ ออกสู่ตลาดนับตั้งแต่มีการรายงาน คำถาม: SQL Server 2017 มีกลไกใดบ้างที่ช่วยให้ค้นหาสาเหตุที่แท้จริงของข้อผิดพลาดนี้ได้หรือไม่? หรือยากที่จะตรวจสอบเหมือนเมื่อประมาณ 9 ปีที่แล้วเมื่อมีการรายงานปัญหา

1
การบีบอัดข้อมูลสำรองทำให้เกิดความเสียหายในฐานข้อมูล TDE SQL 2017
บน SQL Server 2017 (CU3) เมื่อใดก็ตามที่ฉันเปิดใช้งานการบีบอัดข้อมูลสำรองในหนึ่งในฐานข้อมูล TDE ของฉันกระบวนการสำรองข้อมูลจะทำให้หน้าเว็บที่ระบุในฐานข้อมูลเสียหาย ถ้าฉันเรียกใช้การสำรองข้อมูลโดยไม่มีการบีบอัดจะไม่ได้รับความเสียหาย นี่คือขั้นตอนที่ฉันได้ดำเนินการเพื่อตรวจสอบและทำให้เกิดปัญหานี้อีกครั้ง: รัน DBCC CheckDB บนฐานข้อมูล "TDE_DB1"; ทุกอย่างดีไม่มีข้อผิดพลาด สำรองฐานข้อมูลได้สำเร็จโดยไม่ต้องบีบอัด RESTORE VERIFYONLY กล่าวว่าทุกอย่างดี กู้คืนฐานข้อมูลเป็น "TDE_DB2" ได้สำเร็จ; ทั้งหมดเป็นสิ่งที่ดี DBCC CheckDB ไม่แสดงข้อผิดพลาด; สำรองฐานข้อมูล "TDE_DB1" สำเร็จด้วยการบีบอัด กู้คืนข้อผิดพลาดยืนยันว่า "ตรวจพบความเสียหายต่อชุดข้อมูลสำรอง"; พยายามกู้คืนฐานข้อมูลเป็น "TDE_DB2"; ข้อผิดพลาดการพูดว่า "RESTORE ตรวจพบข้อผิดพลาดในหน้า (1: 92454) ในฐานข้อมูล" ทำซ้ำขั้นตอนที่ 1-3; ทั้งหมดเป็นสิ่งที่ดี; DROP "TDE_DB1" และ "TDE_DB2"; กู้คืน "TDE_DB1" จากการสำรองข้อมูล …

1
ชื่อตาราง SQL Server ที่ขึ้นต้นด้วย # ในฐานข้อมูลผู้ใช้ไม่ใช่ใน tempdb ไม่ใช่ตาราง temp
#อย่างใดทศวรรษที่ผ่านมาตารางได้สร้างขึ้นในฐานข้อมูลของเราที่เริ่มต้นด้วย มันแสดงให้เห็นในวัตถุ Explorer tempdbที่ใต้ฐานข้อมูลของแอปไม่ได้อยู่ใน ด้วยเหตุผลบางอย่าง Azure จะไม่นำเข้าฐานข้อมูลเช่นนี้ เราไม่สามารถวางเปลี่ยนชื่อหรือโต้ตอบกับมันได้ ฉันได้ลองลบจาก Object Explorer, Script Drop , Renameจาก GUI และพวกมันไม่ทำงานเลย เราอยู่บน SQL 2008 R2 drop table [*app*].[dbo]."#OBSOLETE"; Database name '*app*' ignored, referencing object in tempdb. Msg 3701, Level 11, State 5, Line 1 Cannot drop the table '#OBSOLETE', because it does not exist …

4
% ในอนุประโยคนี้ทำอะไรได้บ้าง
ฉันกำลังฝึกอบรมและสคริปต์ตัวใดตัวหนึ่งมีคำสั่งต่อไปนี้: SELECT SUM(Col2) FROM clust_table WHERE Col1 % 3 = 1 ฉันต้องการทราบว่าตัวอย่างข้อมูลนี้มีไว้ในส่วนคำสั่ง WHERE: Col1 % 3 = 1 ฉันทำการวิจัยบนอินเทอร์เน็ตและไม่พบการอ้างอิงเกี่ยวกับคำสั่งนี้
13 sql-server  t-sql 

2
DBP FREEPROCCACHE และ DBCC FREESYSTEMCACHE ('แผนการ SQL') ไม่ทำอะไรเลยเพื่อเพิ่มหน่วยความจำ CACHESTORE_SQLCP ฟรี
CACHESTORE_SQLCP Sql Plans ใช้เวลา> 38 GB หลังจากสองสามวัน เรากำลังใช้งานตัวเลือก "เพิ่มประสิทธิภาพสำหรับภาระงาน Ad hoc" (Entity Framework และการรายงานที่กำหนดเองสร้างโฆษณาจำนวนมาก!) SQL Server 2016 SE 3.00.2164.0.v1 บน AWS RDS พร้อมการจำลองแบบหลาย AZ เมื่อฉันวิ่ง: DBCC FREESYSTEMCACHE('SQL Plans'); หรือ DBCC FREEPROCCACHE หรือ DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL หรือ DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL; ดูเหมือนจะไม่ชัดเจนว่า: SELECT TOP 1 type, name, …

1
ปัญหาการสำรองข้อมูลต่างกัน - เพราะเหตุใด เป็นไปได้ไหม
ฉันใช้ SQL Server 2014 และนี่คือสถานการณ์: ฉันมีเซิร์ฟเวอร์ A และเซิร์ฟเวอร์ B ETL ข้ามคืนประมวลผลบนเซิร์ฟเวอร์ A หลังจากกระบวนการโหลดเสร็จสิ้นฐานข้อมูล X จะได้รับการสำรอง (ด้วยCHECKSUMและRESTORE VERIFYONLYเพื่อให้มั่นใจในความน่าเชื่อถือ) จากนั้นจะถูกส่งไปยังเซิร์ฟเวอร์ B เซิร์ฟเวอร์ B ได้รับbakไฟล์จากนั้นกู้คืนฐานข้อมูลที่นั่น ฉันต้องการใช้กลยุทธ์การสำรองข้อมูลที่แตกต่างกันเพื่อที่: การสำรองข้อมูลทั้งหมดจะทำในวันเสาร์เท่านั้น เช่นการสำรองข้อมูลเต็มรูปแบบบนเซิร์ฟเวอร์ A ในวันเสาร์ -> จัดส่งไปยังเซิร์ฟเวอร์ B -> กู้คืนการสำรองข้อมูลเต็มรูปแบบบนเซิร์ฟเวอร์ B ส่วนที่เหลือของวันจะเป็นการสำรองข้อมูลที่แตกต่างกัน เช่นการสำรองข้อมูลที่แตกต่างกันบนเซิร์ฟเวอร์ A -> จัดส่งไปยังเซิร์ฟเวอร์ B -> เรียกคืนการสำรองข้อมูลต่างกันในเซิร์ฟเวอร์ B ฉันได้ลองแล้ว แต่ฉันพบข้อผิดพลาดว่า: ไม่สามารถกู้คืนบันทึกหรือการสำรองข้อมูลส่วนต่างได้เนื่องจากไม่มีไฟล์พร้อมที่จะเปิดใช้งาน ไม่แน่ใจว่าทำไม ฉันตรวจสอบsys.database_filesบนเซิร์ฟเวอร์ A และเซิร์ฟเวอร์ B …

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

1
พฤติกรรมที่ไม่ถูกต้องของ SQL Server 2016 ด้วยตารางที่ปรับให้เหมาะสมหน่วยความจำ
โปรดดูแบบสอบถาม SQL ต่อไปนี้: CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS TABLE ( source_col INT NULL, target_col INT not NULL INDEX ix_InMemoryTable NONCLUSTERED (target_col) ) WITH (MEMORY_OPTIMIZED = ON) GO DECLARE @t dbo.IN_MEMORY_TABLE_TYPE INSERT @t ( source_col, target_col ) VALUES (10, 0), (0, 0) UPDATE r1 SET target_col = -1 FROM @t r1 WHERE …

3
ดำเนินการสืบค้นโดยอัตโนมัติใน MS SQL Studio ทุกชั่วโมง
ฉันสนับสนุนแอปพลิเคชันในองค์กรขนาดใหญ่หนึ่งในบทบาทของฉันคือการล้างข้อมูล มีแบบสอบถามที่ฉันต้องดำเนินการทุกชั่วโมงและฉันต้องการจะทำมันโดยอัตโนมัติ เนื่องจากนโยบายองค์กรฉันไม่สามารถสร้างงาน SQL Server Agent หรือแก้ไขสคีมาได้ฉันสามารถจัดการข้อมูลได้เท่านั้น ไม่มีที่สิ้นสุด WHILE(1=1) BEGIN WAITFOR DELAY '01:00'; --do work END ทำงานให้ฉันได้ แต่ฉันยักความคิดเกี่ยวกับการเชื่อมต่อแบบเปิดโล่ง เป็นการดีที่ฉันจะสคริปต์ MS SS ตัวเองเพื่อรันชิ้นส่วนของรหัสที่กำหนดทุกชั่วโมง แต่ฉันไม่แน่ใจว่าเป็นไปได้ มีวิธีแก้ไขปัญหานี้หรือไม่?

3
เอาชนะข้อจำกัดความยาวอักขระ LIKE
โดยการอ่านข้อจำกัดความยาวของตัวละคร LIKEที่นี่ดูเหมือนว่าฉันไม่สามารถส่งข้อความที่ยาวเกิน ~ 4000 ตัวอักษรในประโยค LIKE ฉันพยายามดึงแผนแบบสอบถามจากแคชแผนแบบสอบถามสำหรับแบบสอบถามเฉพาะ SELECT * FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st where st.text like '%MY_QUERY_LONGER_THAN_4000_CHARS%' ESCAPE '?' หากแบบสอบถามภายในLIKEตัวอักษรยาวเกิน 4,000 ตัวอักษรฉันจะได้ผลลัพธ์ 0 ถึงแม้ว่าแบบสอบถามของฉันจะอยู่ในแผนแคช (ฉันคาดหวังอย่างน้อย erorr) มีวิธีแก้ไขปัญหานี้หรือจะทำแตกต่างกันอย่างไร ผมมีข้อสงสัยซึ่งสามารถ> ตัวอักษรที่ยาวนานและมีลักษณะเหมือนที่ฉันไม่สามารถหาพวกเขาด้วย10000LIKE

2
เหตุใดการวางกุญแจต่างประเทศจึงใช้เวลานาน?
ฉันได้สร้างสคริปต์ที่หนึ่งครั้งลบกุญแจต่างประเทศทั้งหมดจากฐานข้อมูลเช่นนี้: ALTER TABLE MyTable1 DROP CONSTRAINT FK_MyTable1_col1 ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col1 ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col2 สิ่งที่ทำให้ฉันประหลาดใจคือสคริปต์ใช้เวลานาน: โดยเฉลี่ย 20 วินาทีสำหรับแต่ละ DROP FK ตอนนี้ฉันเข้าใจว่าการสร้าง FK อาจเป็นเรื่องใหญ่เพราะเซิร์ฟเวอร์ต้องดำเนินการและตรวจสอบว่าข้อ จำกัด FK ไม่ได้ถูกละเมิดตั้งแต่เริ่มแรก แต่เป็นการลดลงใช่ไหม เซิร์ฟเวอร์ทำอะไรเมื่อปล่อย FKs ที่ใช้เวลานาน นี่เป็นทั้งความอยากรู้อยากเห็นของฉันเองและเพื่อให้เข้าใจว่ามีวิธีที่จะทำให้สิ่งต่าง ๆ เร็วขึ้นหรือไม่ ความสามารถในการลบ FK (ไม่ใช่แค่ปิดการใช้งาน) จะช่วยให้ฉันเร็วขึ้นมากในระหว่างการย้ายข้อมูลและลดเวลาหยุดทำงาน

1
ตัวนับ Perfmon เคาน์เตอร์“ แผนไม่ได้ผล / วินาที” จริง ๆ แล้ววัดอะไร?
ใน SQL Server ตัวนับ Perfmon "Workload Group Stats: Suboptimal แผน / วินาที" วัดอะไร เป็นหนึ่งในเคาน์เตอร์ผู้ว่าการทรัพยากรดังนั้นจึงวัดได้ที่กลุ่มเวิร์กโหลด (ซึ่งคุณมีว่าคุณกำหนดค่า RG หรือไม่) ฉันไม่ได้ถามว่าอะไรทำให้แผนดีหรือแผนไม่ดี แต่สิ่งที่ทำกันโดยเฉพาะมาตรการที่เคาน์เตอร์และคุณจะไปหาแผนการที่สอดคล้องกันที่ไหน? ตัวอย่างเช่นฉันไม่พบสิ่งใดในกิจกรรมเพิ่มเติมที่ดูเหมือนจะตรงกับแบบสอบถามที่เรียกใช้ตัวนับ "แผน / วินาที" ที่ไม่ดี
13 sql-server 

2
ทางเลือกในการ MakeValid () สำหรับข้อมูลเชิงพื้นที่ใน SQL Server 2016
ฉันมีตารางLINESTRINGข้อมูลทางภูมิศาสตร์จำนวนมากที่ฉันย้ายจาก Oracle ไปยัง SQL Server มีการประเมินจำนวนหนึ่งที่ดำเนินการกับข้อมูลนี้ใน Oracle และพวกเขาจะต้องดำเนินการกับข้อมูลใน SQL Server ด้วย ปัญหา: SQL Server มีข้อกำหนดที่เข้มงวดยิ่งขึ้นสำหรับการใช้ที่ถูกต้องLINESTRINGกว่า Oracle; "อินสแตนซ์ LineString ไม่สามารถทับซ้อนกันในช่วงเวลาสองจุดหรือมากกว่าติดต่อกัน" มันก็เกิดขึ้นที่เปอร์เซ็นต์ของเราLINESTRINGไม่เป็นไปตามเกณฑ์นั้นซึ่งหมายความว่าฟังก์ชั่นที่เราต้องประเมินข้อมูลล้มเหลว ฉันต้องการปรับข้อมูลเพื่อให้สามารถตรวจสอบความถูกต้องได้สำเร็จใน SQL Server ตัวอย่างเช่น: ตรวจสอบง่ายมากLINESTRINGที่กลับมาที่ตัวเอง: select geography::STGeomFromText( 'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).IsValidDetailed() 24413: Not valid because of two overlapping edges in curve (1). การดำเนินการกับMakeValidฟังก์ชัน: select …

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