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

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

2
จำนวนการเชื่อมต่อผู้ใช้สูงสุด
ในรุ่นมาตรฐาน SQL Server 2012 ฉันรู้ว่าจำนวนการเชื่อมต่อผู้ใช้สูงสุดคือ 32,767 ฉันควรทำอย่างไรในฐานะ DBA ถ้าฉันมุ่งหน้าไปยังหมายเลขนี้ ขณะนี้มีการเชื่อมต่อกับผู้ใช้ 30,000 รายและคาดว่าจำนวนนี้จะเพิ่มขึ้น

2
Cardinality Estimate สำหรับผู้ประกอบการ LIKE (ตัวแปรท้องถิ่น)
ฉันรู้สึกว่าเมื่อใช้ตัวLIKEดำเนินการในการปรับให้เหมาะสมสำหรับสถานการณ์ที่ไม่รู้จักทั้งมรดกและ CE ใหม่ใช้ประมาณการ 9% (สมมติว่ามีสถิติที่เกี่ยวข้องพร้อมใช้งานและเครื่องมือเพิ่มประสิทธิภาพการสืบค้นไม่จำเป็นต้องคาดเดาการเลือก) เมื่อดำเนินการค้นหาด้านล่างกับฐานข้อมูลเครดิตฉันได้รับการประมาณการที่แตกต่างกันภายใต้ CE ที่แตกต่างกัน ภายใต้ CE ใหม่ฉันได้รับการประมาณ 900 แถวซึ่งฉันคาดหวังภายใต้ CE ดั้งเดิมฉันได้รับการประมาณ 241.416 และฉันไม่สามารถทราบได้ว่าการประเมินนี้มาจากอะไร มีใครสามารถที่จะหลั่งน้ำตาแสงใด ๆ ? -- New CE (Estimate = 900) DECLARE @LastName VARCHAR(15) = 'BA%' SELECT * FROM [Credit].[dbo].[member] WHERE [lastname] LIKE @LastName; -- Forcing Legacy CE (Estimate = 241.416) DECLARE @LastName VARCHAR(15) = …

4
เหตุใดบันทึกการทำธุรกรรมจึงยังคงเติบโตในโหมดการกู้คืนอย่างง่ายพร้อมการสำรองข้อมูลทุกคืน
ก่อนที่จะทำเครื่องหมายว่าซ้ำกันทันทีฉันได้อ่านของ Mike Walsh เหตุใดทรานแซคชันทรานแซกชันเติบโตหรือหมดพื้นที่ แต่ฉันไม่คิดว่ามันจะให้คำตอบกับสถานการณ์ของฉัน ฉันดูคำถามที่คล้ายกันหลายสิบคำถาม แต่คำถามที่เกี่ยวข้องส่วนใหญ่เพิ่งพูดว่า "ซ้ำ" และชี้ไปที่คำถามของไมค์ รายละเอียด: ฉันมีฐานข้อมูลจำนวน ~ 500MB ใน SQL Server 2008 R2 ทั้งหมดในโหมดการกู้คืนที่เรียบง่าย (ไม่ใช่ตัวเลือกของฉัน) สำรองข้อมูลเต็มรูปแบบทุกคืนพร้อมแฟ้มข้อมูล ~ 200MB และไฟล์บันทึก ~ 300MB บันทึกจะไม่โตขึ้นเป็น 300MB ทันที แต่ค่อนข้างช้าในช่วงสองสามเดือน ไม่มีธุรกรรมใด ๆ เปิดอยู่อย่างน้อยตาม sp_who2 และการตรวจสอบกิจกรรม ถ้าฉันคลิกขวาที่ฐานข้อมูลและเลือกคุณสมบัติมันบอกฉันว่ามี ~ 50MB ฟรี โดยเฉพาะอย่างยิ่งหลังจากการสำรองข้อมูลไฟล์บันทึกทั้งหมดไม่ควรว่างหรือไม่ ในโหมด SIMPLE บันทึกไม่ควรฟรีตราบใดที่ไม่มีธุรกรรมเปิดอยู่ log_reuse_wait_descจากsys.databasesว่าพูดว่า "ไม่มีอะไร" ซึ่งขึ้นอยู่กับคำถามและคำตอบที่อ้างถึงข้างต้นบอกว่ามันไม่ควรรออะไรที่จะนำมาใช้ซ้ำพื้นที่ ถ้าฉันทำ 'DBCC SHRINKFILE' ไฟล์บันทึกจะลดลงเหลือ …

5
SARGable WHERE clause สำหรับสองคอลัมน์วันที่
ฉันมีคำถามที่น่าสนใจเกี่ยวกับ SARGability คืออะไร ในกรณีนี้มันเกี่ยวกับการใช้เพรดิเคตกับความแตกต่างระหว่างสองคอลัมน์วันที่ นี่คือการตั้งค่า: USE [tempdb] SET NOCOUNT ON IF OBJECT_ID('tempdb..#sargme') IS NOT NULL BEGIN DROP TABLE #sargme END SELECT TOP 1000 IDENTITY (BIGINT, 1,1) AS ID, CAST(DATEADD(DAY, [m].[severity] * -1, GETDATE()) AS DATE) AS [DateCol1], CAST(DATEADD(DAY, [m].[severity], GETDATE()) AS DATE) AS [DateCol2] INTO #sargme FROM sys.[messages] AS [m] …

9
ทดสอบว่าสตริงเป็น palindrome โดยใช้ T-SQL
ฉันเป็นผู้เริ่มต้นใน T-SQL ฉันต้องการตัดสินใจว่าสตริงอินพุตเป็น palindrome โดยมีเอาต์พุต = 0 หากไม่ใช่และ output = 1 หากเป็น ฉันยังคงหาไวยากรณ์ ฉันไม่ได้รับข้อความแสดงข้อผิดพลาด ฉันกำลังมองหาวิธีแก้ไขปัญหาที่แตกต่างกันและข้อเสนอแนะบางอย่างเพื่อให้ได้ความเข้าใจและความรู้ที่ดีขึ้นเกี่ยวกับวิธีการทำงานของ T-SQL เพื่อให้ทำงานได้ดีขึ้น - ฉันยังเป็นนักเรียนอยู่ ความคิดหลักที่ฉันเห็นคือการเปรียบเทียบอักขระซ้าย - ขวา - ส่วนใหญ่กับแต่ละอื่น ๆ เพื่อตรวจสอบความเท่าเทียมกันจากนั้นไปเปรียบเทียบอักขระที่สองจากด้านซ้ายกับอักขระ 2 จากซ้ายและสุดท้าย เราวนซ้ำ: ถ้าตัวละครมีค่าเท่ากันเราจะดำเนินการต่อ ถ้าเราถึงจุดสิ้นสุดเราจะเอาท์พุท 1 ถ้าไม่เราก็เอาท์พุท 0 คุณช่วยวิจารณ์ได้ไหม: CREATE function Palindrome( @String Char , @StringLength Int , @n Int , @Palindrome BIN , …

2
ใน SQL Server ฉันสามารถรับประกันการสั่งซื้อโดยไม่มีคำสั่ง ORDER BY อย่างชัดเจนเมื่อการค้นหาดัชนีถูกบังคับบนตารางที่มีเพียงดัชนีคลัสเตอร์เท่านั้น
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 4 ปีที่แล้ว อัปเดต 2014-12-18 ด้วยการตอบรับอย่างล้นหลามไปที่คำถามหลักที่ถูก "ไม่มี" การตอบสนองที่น่าสนใจมากขึ้นได้มุ่งเน้นในส่วนที่ 2 ORDER BYวิธีในการแก้ปริศนาประสิทธิภาพการทำงานที่มีความชัดเจน แม้ว่าฉันได้ทำเครื่องหมายคำตอบไว้แล้ว แต่ฉันก็ไม่แปลกใจถ้ามีวิธีการแก้ปัญหาที่ดีกว่า เป็นต้นฉบับ คำถามนี้เกิดขึ้นเพราะวิธีแก้ปัญหาที่เร็วที่สุดเพียงอย่างเดียวที่ฉันสามารถพบกับปัญหาเฉพาะนั้นใช้ได้โดยไม่มีORDER BYข้อ ด้านล่างนี้เป็น T-SQL แบบเต็มรูปแบบที่จำเป็นในการสร้างปัญหาพร้อมกับวิธีแก้ไขปัญหาที่เสนอของฉัน (ฉันใช้ SQL Server 2008 R2 ถ้าเป็นเช่นนั้น) --Create Orders table IF OBJECT_ID('tempdb..#Orders') IS NOT NULL DROP TABLE #Orders CREATE TABLE #Orders ( OrderID INT …
24 sql-server 

6
ฉันสามารถอ่านค่า SQL Server Identity ตามลำดับได้หรือไม่?
TL: DR:คำถามด้านล่างนี้ลดลงเหลือ: เมื่อแทรกแถวจะมีหน้าต่างของโอกาสระหว่างการสร้างIdentityค่าใหม่และการล็อคกุญแจแถวที่สอดคล้องกันในดัชนีคลัสเตอร์ซึ่งผู้สังเกตการณ์ภายนอกจะเห็นที่ใหม่กว่า Identityมูลค่าแทรกโดยการทำธุรกรรมพร้อมกันหรือไม่ (ใน SQL Server) รุ่นโดยละเอียด ฉันมีตาราง SQL Server พร้อมIdentityคอลัมน์ที่เรียกว่าCheckpointSequenceซึ่งเป็นกุญแจสำคัญของดัชนีคลัสเตอร์ของตาราง (ซึ่งยังมีดัชนี nonclustered เพิ่มเติมอีกจำนวนหนึ่ง) แถวถูกแทรกเข้าไปในตารางโดยกระบวนการและเธรดพร้อมกันจำนวนมาก (ที่ระดับการแยกREAD COMMITTEDและไม่มีIDENTITY_INSERT) ในเวลาเดียวกันมีกระบวนการที่อ่านแถวจากดัชนีคลัสเตอร์เป็นระยะโดยเรียงลำดับตามCheckpointSequenceคอลัมน์นั้น(เช่นเดียวกับที่ระดับการแยกREAD COMMITTEDด้วยREAD COMMITTED SNAPSHOTตัวเลือกที่ถูกปิด) ขณะนี้ฉันพึ่งพาข้อเท็จจริงที่ว่ากระบวนการอ่านไม่สามารถ "ข้าม" จุดตรวจสอบได้ คำถามของฉันคือ: ฉันสามารถพึ่งพาอสังหาริมทรัพย์นี้ได้หรือไม่? และถ้าไม่ฉันจะทำอย่างไรเพื่อทำให้เป็นจริง ตัวอย่าง: เมื่อแทรกแถวที่มีค่าเอกลักษณ์ 1, 2, 3, 4 และ 5 ผู้อ่านจะต้องไม่เห็นแถวที่มีค่า 5 ก่อนที่จะเห็นแถวที่มีค่า 4 การทดสอบแสดงให้เห็นว่าแบบสอบถามซึ่งมีORDER BY CheckpointSequenceข้อ ( และWHERE CheckpointSequence > -1ประโยค) บล็อกได้อย่างน่าเชื่อถือเมื่อใดก็ตามที่ต้องอ่านแถว 4 …

2
ความแตกต่างระหว่างแบบแผนที่เป็นเจ้าของและการเป็นสมาชิกบทบาทสำหรับ Microsoft SQL Server
มีความแตกต่างระหว่างOwned SchemasและRole Members? จากความเข้าใจของฉันRole Membersผู้ใช้จำเป็นต้องมีอย่างน้อยหนึ่งกล่องกาเครื่องหมายภายใต้Role Membersการตรวจสอบ อย่างไรก็ตามการOwned Schemasบังคับไม่ได้ มันทำให้ฉันสงสัยว่าทำไมต้องมีOwned Schemasใน

5
ระบุขั้นตอนการจัดเก็บที่ไม่ได้ใช้
ในปีหน้านี้ฉันกำลังช่วยทำความสะอาดสภาพแวดล้อม SQL Server หลายแห่ง เรามีขั้นตอนการจัดเก็บประมาณ 10,000 รายการและประมาณว่ามีเพียง 1,000 รายการเท่านั้นที่ใช้เป็นประจำและอีก 200 รายการจะใช้ในโอกาสที่หายากซึ่งหมายความว่าเรามีงานต้องทำมากมาย เนื่องจากเรามีหลายแผนกและทีมที่สามารถเข้าถึงฐานข้อมูลและขั้นตอนเหล่านี้ได้เราจึงไม่ใช่คนที่เรียกขั้นตอนเหล่านี้เสมอไปซึ่งหมายความว่าเราต้องกำหนดว่าจะเรียกใช้ขั้นตอนใด ยิ่งไปกว่านั้นเราต้องการตรวจสอบสิ่งนี้ในอีกไม่กี่เดือนไม่ใช่ในอีกสองสามวัน (ซึ่งเป็นการขจัดความเป็นไปได้บางอย่าง) วิธีการหนึ่งในการทำเช่นนี้คือการใช้SQL Server Profilerและติดตามว่ากระบวนการใดที่ถูกเรียกใช้และเปรียบเทียบกับรายการของกระบวนการที่เรามีในขณะที่ทำเครื่องหมายว่ามีการใช้งานหรือไม่ จากนั้นเราสามารถย้ายขั้นตอนไปยังสคีมาอื่นในกรณีที่แผนกกรีดร้อง ใช้Profilerวิธีที่มีประสิทธิภาพที่สุดที่นี่หรือไม่? และ / หรือคุณเคยทำสิ่งที่คล้ายกันและพบวิธีอื่น / วิธีที่ดีกว่าในการทำเช่นนี้?

3
ทำไม `SELECT @@ IDENTITY 'ถึงส่งกลับทศนิยม
ฉันใช้Dapperเพื่อดำเนินการค้นหาต่อไปนี้กับอินสแตนซ์ SQL Server 2008 R2 Express จากแอปพลิเคชัน ASP.NET MVC 3 (.NET 4.0) INSERT INTO Customers ( Type, Name, Address, ContactName, ContactNumber, ContactEmail, Supplier) VALUES ( @Type, @Name, @Address, @ContactName, @ContactNumber, @ContactEmail, @Supplier) SELECT @@IDENTITY การเรียกร้องให้connection.Query<int>(sql, ...)ส่งการยกเว้น Cast ไม่ถูกต้อง ผมเคยบั๊กมันและมันก็เป็นจุดที่ Dapper เรียกบนกลับGetValueSqlDataReader ชนิดส่งคืนของGetValueคือObjectการตรวจสอบในรายการดีบักเกอร์ซึ่งเป็นทศนิยมแบบกล่อง ถ้าฉันเปลี่ยนการเลือกSELECT CAST(@@IDENTITY as int)เป็นการคืนค่าของ GetValue จะเป็น int แบบกล่องและข้อยกเว้นจะไม่ถูกส่งออกไป …

3
แนวปฏิบัติที่เหมาะสมที่สุดสำหรับการใช้ schema ใน SQL Server คืออะไร
ฉันเข้าใจความสามารถของ SQL Server Schemas แต่แนวทางปฏิบัติที่ดีที่สุดคืออะไร แน่ใจว่าพวกเขาให้ความปลอดภัยอีกชั้นหนึ่งและจัดกลุ่มตรรกะของวัตถุฐานข้อมูลภายในฐานข้อมูล แต่สิ่งที่เป็นปกติออกมี จากประสบการณ์ของฉันบ่อยครั้งที่ฉันไม่เห็นว่ามีการใช้สคีมาที่กำหนดเองจำนวนมาก เป็นเรื่องปกติหรือไม่ มันเป็นสถานการณ์ที่ไม่บ่อยนักที่ควรใช้สกีมาที่กำหนดเองหรือไม่

3
ดัชนีบนคอลัมน์ที่คำนวณแล้วต้องการค้นหาคีย์เพื่อรับคอลัมน์ในนิพจน์ที่คำนวณ
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 6 ปีที่แล้ว ฉันมีคอลัมน์ที่คำนวณแล้วยังคงอยู่บนโต๊ะซึ่งเป็นเพียงคอลัมน์ที่ต่อกันเช่น CREATE TABLE dbo.T ( ID INT IDENTITY(1, 1) NOT NULL CONSTRAINT PK_T_ID PRIMARY KEY, A VARCHAR(20) NOT NULL, B VARCHAR(20) NOT NULL, C VARCHAR(20) NOT NULL, D DATE NULL, E VARCHAR(20) NULL, Comp AS A + '-' + …

1
แผนการดำเนินการแสดงการดำเนินการ CONVERT_IMPLICIT ราคาแพง ฉันสามารถแก้ไขสิ่งนี้ด้วยการจัดทำดัชนีหรือฉันจำเป็นต้องเปลี่ยนตารางหรือไม่?
ฉันมีมุมมองที่สำคัญและช้ามาก ๆ ซึ่งรวมถึงเงื่อนไขที่น่าเกลียดบางอย่างเช่นนี้ในส่วนที่ ฉันยังทราบด้วยว่าการรวมนั้นเป็นการรวมแบบรวมและแบบช้าในvarchar(13)แทนที่จะเป็นฟิลด์จำนวนเต็ม แต่ต้องการปรับปรุงการค้นหาแบบง่ายด้านล่างที่ใช้มุมมองนี้: CREATE VIEW [dbo].[vwReallySlowView] AS AS SELECT I.booking_no_v32 AS bkno, I.trans_type_v41 AS trantype, B.Assigned_to_v61 AS Assignbk, B.order_date AS dateo, B.HourBooked AS HBooked, B.MinBooked AS MBooked, B.SecBooked AS SBooked, I.prep_on AS Pon, I.From_locn AS Flocn, I.Trans_to_locn AS TTlocn, (CASE I.prep_on WHEN 'Y' THEN I.PDate ELSE I.FirstDate END) …
24 sql-server  view 

1
รูปแบบตัวอักษรวันที่ / เวลา LANGUAGE และ DATEFORMAT ปลอดภัยอย่างไร
มันเป็นเรื่องง่ายที่จะแสดงให้เห็นว่าวันที่ / เวลารูปแบบหลายอื่น ๆกว่าสองต่อไปนี้เป็นความเสี่ยงที่จะเข้าใจผิดเนื่องจาก SET ภาษาตลาดหลักทรัพย์ DATEFORMAT หรือภาษาเริ่มต้นการเข้าสู่ระบบของ: yyyyMMdd -- unseparated, date only yyyy-MM-ddThh:mm:ss.fff -- date dash separated, date/time separated by T แม้รูปแบบนี้โดยไม่มี T อาจดูเหมือนรูปแบบ ISO 8601 ที่ถูกต้อง แต่มันล้มเหลวในหลายภาษา: DECLARE @d varchar(32) = '2017-03-13 23:22:21.020'; SET LANGUAGE Deutsch; SELECT CONVERT(datetime, @d); SET LANGUAGE Français; SELECT CONVERT(datetime, @d); ผล: Die Spracheneinstellung …

1
วิธีปฏิบัติที่ดีที่สุดในการลดขนาด Tempdb ในสภาพแวดล้อมการผลิต
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 5 ปีที่ผ่านมา แนวปฏิบัติที่เหมาะสมที่สุดที่จะใช้เมื่อลดขนาด db ชั่วคราวใน SQL Server 2008 คืออะไร การใช้สิ่งต่อไปนี้มีความเสี่ยงหรือไม่? use tempdb GO DBCC FREEPROCCACHE -- clean cache DBCC DROPCLEANBUFFERS -- clean buffers DBCC FREESYSTEMCACHE ('ALL') -- clean system cache DBCC FREESESSIONCACHE -- clean session cache DBCC SHRINKDATABASE(tempdb, 10); -- shrink …

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