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

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

2
ล็อคผู้ใช้ sa ของฉันออก
ดังนั้นฉันจึงพยายามเปลี่ยนการตั้งค่าบางอย่างใน Microsoft SQL Server Management Studio 2019 ของฉันฉันเปลี่ยนโหมดการเข้าสู่ระบบจากแบบผสม (การตรวจสอบ Windows และ SQL) เป็น Windows เท่านั้นและตอนนี้ฉันไม่สามารถเข้าสู่ระบบด้วยบัญชี sa ของฉันและฉันไม่ได้ มีบัญชีอื่นที่มีสิทธิ์ของผู้ดูแลระบบ ฉันควรทำอย่างไรดี? ข้อเสนอแนะใด ๆ จะได้รับการชื่นชมอย่างมาก

1
สิ่งที่เป็นประโยชน์ของการตั้งค่า ARITHABORT ON สำหรับการเชื่อมต่อทั้งหมดใน SQL Server?
ดังนั้นผมจึงได้พิจารณาแล้วว่าพฤติกรรมผิดปกติของ SQL Server ของฉันคือเนื่องจากการตั้งค่าเริ่มต้นของผู้ให้บริการสุทธิ SqlClient SET ARITHABORT OFFข้อมูลของ ด้วยที่กล่าวว่าฉันได้อ่านบทความต่าง ๆ ที่ถกเถียงวิธีที่ดีที่สุดในการใช้งาน สำหรับฉันฉันแค่ต้องการวิธีที่ง่ายเพราะ SQL Server กำลังทนทุกข์และการปรับแต่งการสืบค้นของฉันยังไม่ได้มีการข้ามผ่านแอพอย่างสมบูรณ์ (และแน่นอนว่าการเพิ่มSETใน sp ไม่ทำงาน) ในบทความยอดเยี่ยมเกี่ยวกับหัวข้อของ Erland Sommarskog เขาแนะนำให้ใช้วิธีการที่ปลอดภัยโดยการเปลี่ยนแอพให้เป็นปัญหาSET ARITHABORT ONสำหรับการเชื่อมต่อ อย่างไรก็ตามในคำตอบนี้จากคำถาม dba.stackexchange โซโลมอน Rutzky เสนอวิธีการแบบกว้างและแบบฐานข้อมูล ฉันหายไปที่นี่โดยการตั้งค่าทั้งอินสแตนซ์นี้ได้อย่างไร ตามที่ฉันเห็น ... เนื่องจาก SSMS มีการตั้งค่านี้ONตามค่าเริ่มต้นฉันไม่เห็นอันตรายใด ๆ ในการตั้งค่าทั้งONเซิร์ฟเวอร์สำหรับการเชื่อมต่อทั้งหมด ในตอนท้ายของวันฉันแค่ต้องการ SQL Server นี้เพื่อดำเนินการเหนือสิ่งอื่นใด

5
การนับ SQL แตกต่างกันในพาร์ติชัน
ฉันมีตารางที่มีสองคอลัมน์ฉันต้องการนับค่าที่แตกต่างใน Col_B มากกว่า (เงื่อนไขโดย) Col_A MyTable Col_A | Col_B A | 1 A | 1 A | 2 A | 2 A | 2 A | 3 b | 4 b | 4 b | 5 ผลลัพธ์ที่คาดหวัง Col_A | Col_B | Result A | 1 | 3 A | 1 …

1
สร้างวิธีเรียงสับเปลี่ยนและชุดค่าผสมสำหรับคอลัมน์ชื่อ
ฉันมีข้อมูลตัวอย่างต่อไปนี้สำหรับการเรียงสับเปลี่ยนและการรวมกัน create table tbltest ( name varchar(50), addres varchar(100) ); insert into tbltest values('Sam Mak John','Street 1 HNo 101 USA'); insert into tbltest values('Donatella Nobatti','HNo 101 UK'); insert into tbltest values('Sam Buca','Main Road B Block UAE'); insert into tbltest values('Juan Soponatime','Hight Street CA'); insert into tbltest values('Aaron Spacemuseum','HNo A10 100 …

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

1
ผลรวมของการลอยตัวแบบไม่กำหนดค่า
ผมขอรัฐกำปั้นชัดเจน: ฉันสมบูรณ์เข้าใจว่าลอยชนิดจุดไม่ถูกต้องแทนค่าทศนิยม นี่ไม่เกี่ยวกับเรื่องนั้น! อย่างไรก็ตามการคำนวณจุดลอยตัวควรจะถูกกำหนดไว้ล่วงหน้า ตอนนี้มันออกไปให้ฉันแสดงให้คุณเห็นกรณีแปลก ๆ ที่ฉันสังเกตเห็นในวันนี้ ฉันมีรายการค่าจุดลอยตัวและฉันต้องการรวมค่าเหล่านี้: CREATE TABLE #someFloats (val float); INSERT INTO #someFloats (val) VALUES (1), (1), (1.2), (1.2), (1.2), (3), (5); SELECT STR(SUM(#someFloats.val), 30, 15) FROM #someFloats; DROP TABLE #someFloats; -- yields: -- 13.600000000000001 จนถึงตอนนี้ดีมาก - ไม่น่าประหลาดใจที่นี่ เราทุกคนรู้ว่า1.2ไม่สามารถแสดงได้อย่างแน่นอนในการเป็นตัวแทนไบนารีดังนั้นคาดว่าจะได้ผลลัพธ์ที่ "ไม่ชัดเจน" ต่อไปนี้เป็นสิ่งที่แปลกประหลาดเกิดขึ้นเมื่อฉันออกจากโต๊ะอื่น: CREATE TABLE #A (a int); INSERT …

3
แปลงฟังก์ชัน Scalar เป็นฟังก์ชัน TVF สำหรับการประมวลผลแบบขนาน - ยังคงทำงานในโหมดอนุกรม
หนึ่งในแบบสอบถามของฉันทำงานในโหมดการดำเนินการแบบอนุกรมหลังจากวางจำหน่ายและฉันสังเกตเห็นว่ามีการใช้ฟังก์ชันใหม่สองรายการในมุมมองซึ่งอ้างอิงใน LINQ ไปยัง SQL Query ที่สร้างขึ้นจากแอปพลิเคชัน ดังนั้นฉันจึงแปลงฟังก์ชัน SCALAR เหล่านั้นเป็นฟังก์ชั่น TVF แต่คำถามก็ยังคงทำงานอยู่ในโหมดอนุกรม ก่อนหน้านี้ฉันได้แปลง Scalar เป็น TVF ในข้อความค้นหาอื่นและแก้ปัญหาการบังคับให้เรียกใช้งานอนุกรม นี่คือฟังก์ชันสเกลาร์: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER …

2
จำกัด การใช้งาน CPU สูงสุด SQL SERVER ด้วย WSRM
ฉันมีเซิร์ฟเวอร์จริงที่ใช้งาน SQL Server อยู่หนึ่งอินสแตนซ์ ฉันสังเกตเห็นว่าบ่อยครั้งที่เซิร์ฟเวอร์นี้ใช้งาน CPU 100% ทีมไอทีของฉันไม่มีความสุขกับเรื่องนี้และแนะนำให้เราสำรอง 2 จาก 32 คอร์สำหรับระบบปฏิบัติการ ใช้งานได้ดีตอนนี้การใช้งานสูงสุดจะต่ำกว่า 90% นอกจากนี้การดึงข้อมูลช้าจากผู้ใช้หลายคนจะไม่ถูกรายงานอีกต่อไป มีเหตุผลใดที่จะไม่ใช้ WSRM (Windows System Resource Manager) ด้วยวิธีนี้ - แทนที่จะเป็น SQL Resource Governor?

1
การใช้กระบวนการไม่ถูกต้องจากเหตุการณ์ที่เพิ่มความสมบูรณ์ของระบบหรือไม่
ฉันเพิ่งทำงานเกี่ยวกับการทำความเข้าใจข้อมูลหรือตัวชี้วัดที่ถูกเก็บไว้ในไฟล์เหตุการณ์ขยายระบบสุขภาพ เรากำลังพยายามใช้การรวบรวมข้อมูลของตัวชี้วัดประสิทธิภาพโดยใช้ความสมบูรณ์ของระบบตามที่ระบุไว้ที่นี่ มีรายงานที่ให้ตัวชี้วัดเช่นการใช้ CPU, การใช้งานกระบวนการอื่น ๆ ที่รวบรวมจากเหตุการณ์สถานะระบบ scheduler_monitor_system_health_ring_buffer_recorded ฉันไม่สามารถเข้าใจเซิร์ฟเวอร์ไม่กี่แห่งของฉันได้เพราะเหตุใดฟิลด์ "process_utilization" ซึ่งแสดงอยู่ในรายงานเนื่องจากการใช้งาน CPU CPU นั้นใช้เวลาส่วนใหญ่มากกว่า 100 เวลาสูงสุดในช่วงเวลาสูงสุดจะแตกต่างกันระหว่าง 120-160 และเพราะรายงานนั้น แสดง CPU ที่สูงกว่า 100 เสมอแม้ว่าฉันจะตรวจสอบจากเซิร์ฟเวอร์กิจกรรมการตรวจสอบที่ไม่เคยกรณี ฉันได้หยิบยกปัญหานี้ขึ้นใน Github แต่ดูเหมือนไม่มีการแก้ไขหรือตอบสนอง ดังนั้นคำถามของฉันจะเป็น ฉันจะได้รับหมายเลขที่ถูกต้องสำหรับการใช้งาน CPU CPU สำหรับเซิร์ฟเวอร์ของฉันโดยใช้บัฟเฟอร์เสียงเรียกทำงานระบบได้อย่างไร? รายงานยังแสดงตัวนับสำหรับเขตข้อมูลด้านล่าง 2 คำนวณจากรายงานของพวกเขา 100-System_idle-process_utilization เป็น OtherProcessUtil 100-system_idle เป็น SystemUtil OtherProcessUtilและSystemUtilเหล่านี้มีความจำเป็น / มีประโยชน์สำหรับอะไร? ฉันยังเห็นการใช้หน่วยความจำทุกครั้งที่แสดงเป็น 100 ซึ่งดูไม่ถูกต้องเช่นกัน มีใครสังเกตเห็นไหม เครื่องมืออื่น ๆ เช่น …

1
SHRINKFILE Failure - ทำไมการเพิ่มขนาดไฟล์จึงแก้ไขได้?
ฉันใช้SHRINKFILEการดำเนินการบางอย่างเพื่อทำความสะอาดไฟล์เล็ก ๆ ที่ไม่จำเป็นในกลุ่มไฟล์ สำหรับการย่อขนาดหนึ่งคำสั่งด้านล่างส่งผลให้เกิดข้อผิดพลาด: DBCC SHRINKFILE (N'myfile' , EMPTYFILE)' ID ไฟล์ x ของ ID ฐานข้อมูล x ไม่สามารถย่อขนาดได้เนื่องจากเป็นกระบวนการที่ถูกย่อโดยกระบวนการอื่นหรือว่างเปล่า มันไม่ได้ว่างเปล่าหรือหดตัว มันกำลังถูกรันบนฐานข้อมูลที่ไม่ได้ใช้งานโดยทุกคนยกเว้นตัวฉันเอง ไม่ได้เปิดใช้งานการย่อขนาดอัตโนมัติและไม่เคยเป็น แต่มีอยู่ shrinks คู่มือการดำเนินการเกี่ยวกับฐานข้อมูลนี้เป็นประจำก่อนที่จะฉันได้รับในมือของฉันที่มันถ้าเรื่องที่ทุก บนSQLServerCentralเธรดจากทศวรรษที่ผ่านมาแนะนำการเพิ่ม MB ไม่กี่ MB ลงในแฟ้มได้เนื่องจาก "ตั้งค่าตัวนับภายในหรือสวิตช์ภายในที่บอกว่ามันไม่ได้อยู่ในช่วงหดตัวในขณะนี้" สิ่งนี้ใช้ได้ - ยอดเยี่ยม แต่ทุกคนสามารถอธิบายรายละเอียดที่มากขึ้นว่า / ทำไมมันถึงเกี่ยวกับ SQL Server internals?

3
เงื่อนไขการกรองไม่ถูกต้องนำไปใช้กับดัชนีคอลัมน์ที่เก็บแบบคลัสเตอร์
จากตัวอย่างด้านล่างเพรดิเคตจะเหมือนกันอย่างไรก็ตามคำสั่ง top (ถูกต้อง) ส่งคืน 0 แถวคำสั่งด้านล่างส่งคืน 1 - แม้ว่าเพรดิเคตจะไม่ตรงกัน: declare @barcode nchar(22)=N'RECB012ZUKI449M1VBJZ' declare @tableId int = null declare @total decimal(10, 2) = 5.17 SELECT 1 FROM [dbo].[transaction] WITH (INDEX([IX_Transaction_TransactionID_PaymentStatus_DeviceID_DateTime_All])) WHERE Barcode = @barcode AND StatusID = 1 AND TableID = @tableID AND @total <= Total SELECT 1 FROM [dbo].[transaction] WHERE …

5
วิธีปฏิเสธการเข้าถึง SQL Server เพื่อเข้าสู่ระบบบางอย่างผ่าน SSMS แต่อนุญาตผ่าน. Net SqlClient Data Provider
เรามีสถานการณ์ที่นักพัฒนาไม่ได้UPDATEรับอนุญาตใด ๆแต่พวกเขาทำงานกับแอปพลิเคชันและดูสตริงการเชื่อมต่อ -> พวกเขารู้รหัสผ่านจากบัญชี SQL บางบัญชี (ตัวอย่างSQLLogin1) ที่มีสิทธิ์อัปเดต การดำเนินงานของเราในปัจจุบันยังไม่สมบูรณ์แบบและบางครั้งข้อมูลการผลิตจะต้องมีการแก้ไข (ยังไม่มี GUI สำหรับสิ่งนั้น) แทนที่จะติดต่อ DBA และขอให้เขาแก้ไขข้อมูลนักพัฒนาจะใช้บัญชี SQL (ไม่ถูกต้อง) SQLLogin1(ที่มีสิทธิ์ในการปรับเปลี่ยนข้อมูล) และเชื่อมต่อกับ SQL Server Management Studio เพื่อแก้ไขข้อมูลเอง DBA ไม่สามารถเปลี่ยนรหัสผ่านได้หากSQLLogin1ไม่มี Developer จะเห็นสตริงการเชื่อมต่อใหม่และรหัสผ่านใหม่เนื่องจากสตริงการเชื่อมต่อแอปพลิเคชันที่ใช้SQLLogin1นั้นดูแลโดยนักพัฒนา คำถาม: มีวิธีที่จะปฏิเสธการเข้าถึงการSQLLogin1เข้าสู่ระบบ SQL แต่ถ้ามันเชื่อมต่อผ่าน SSMS หรือไม่? ในเวลาเดียวกันหากSQLLogin1เชื่อมต่อผ่าน.Net SqlClient Data Provider( program_nameในsys.dm_exec_sessions) จะต้องได้รับอนุญาตให้เข้าสู่ระบบ วิธีนี้เราไม่ต้องการให้นักพัฒนาเชื่อมต่อผ่าน SSMS โดยใช้SQLLogin1ในขณะที่แอปพลิเคชันที่ใช้อยู่SQLLogin1จะยังคงสามารถเชื่อมต่อได้

4
อะไรคือเหตุผลในการใช้ double inner join ในคำสั่ง SQL นี้
ฉันกำลังดูที่แบบสอบถาม SQL ดั้งเดิม บิตที่ฉันไม่สามารถรับได้คือสาเหตุที่มันเข้าร่วมตารางเดียวกันสองครั้งในคอลัมน์เดียวกัน ฉันกำลังพูดถึง Table1 และ Table1 เข้าร่วมกับนามแฝง "Table1Alias" SELECT DISTINCT othercolumns, Table1Alias.columna FROM maintable INNER JOIN secondarytable ON maintable.id1 = secondarytable.a_id1 INNER JOIN table1 ON secondarytable.id2 = table1.id3 INNER JOIN table1 Table1Alias ON secondarytable.id2 = Table1Alias.id3 INNER JOIN thirdtable ON table1.id4 = thirdtable.id5 INNER JOIN fourthtable ON thirdtable.id6 …
10 sql-server 

1
กฎใดที่กำหนดเมื่อ SQL Server ใช้ CTE เป็น "รั้วการปรับให้เหมาะสม"
ในขณะที่กลับมา Brent Ozar เผยแพร่โพสต์รายละเอียดบางส่วนของความแตกต่างระหว่าง SQL Server และ PostgreSQL: ความแตกต่างที่สำคัญสองประการระหว่าง SQL Server กับ PostgreSQL จุดแรก (“ CTE เป็นรั้วการเพิ่มประสิทธิภาพ”) จับตาของฉันเพราะเห็นได้ชัดว่าในตัวอย่างที่มีให้ SQL Server รวม CTE และแบบสอบถามหลักเข้าด้วยกันและปรับให้เป็นแบบสอบถามเดียว (ตรงข้ามกับพฤติกรรมตรงข้ามใน PostgreSQL) อย่างไรก็ตามพฤติกรรมนี้ดูเหมือนจะตรงกันข้ามกับตัวอย่างที่ฉันเห็นในบล็อกและคลาสฝึกอบรมอื่น ๆ ที่ SQL Server ใช้ CTE เป็นรั้วการปรับให้เหมาะสมซึ่งช่วยให้ใช้ดัชนีได้ดีขึ้นประสิทธิภาพที่ดีขึ้นเป็นต้นตัวอย่างเช่น วิธีที่ดีกว่าในการเลือกดาว ดังนั้นดูเหมือนว่า SQL Server จะ "ให้เกียรติ" CTE เป็นกรอบการเพิ่มประสิทธิภาพบางครั้ง มีทรัพยากรที่ดีใดบ้างที่บันทึกรายการเฉพาะของกรณีที่ทราบซึ่ง SQL Server จะให้เกียรติ CTE อย่างน่าเชื่อถือเป็นรั้วการเพิ่มประสิทธิภาพ (หรือพฤติกรรมที่ตรงกันข้าม)

2
ทำไมจึงเร็วกว่านี้และปลอดภัยที่จะใช้หรือไม่ (ที่ตัวอักษรตัวแรกอยู่ที่ไหนในตัวอักษร)
เรื่องย่อสั้น ๆ เรากำลังอัปเดตผู้คนกลุ่มเล็ก ๆ ด้วยค่านิยมจากกลุ่มคนที่มีขนาดใหญ่มาก ในการทดสอบล่าสุดการอัพเดทนี้ใช้เวลาประมาณ 5 นาทีในการรัน เราพบสิ่งที่ดูเหมือนว่าการปรับให้เหมาะสมที่สุดที่เป็นไปได้ซึ่งดูเหมือนว่าจะทำงานได้อย่างสมบูรณ์แบบ! แบบสอบถามเดียวกันนี้ทำงานในเวลาน้อยกว่า 2 นาทีและสร้างผลลัพธ์เดียวกันอย่างสมบูรณ์แบบ นี่คือแบบสอบถาม บรรทัดสุดท้ายถูกเพิ่มเป็น "การเพิ่มประสิทธิภาพ" ทำไมเวลาค้นหาที่ลดลงอย่างมาก พวกเราขาดอะไรบางอย่าง? สิ่งนี้นำไปสู่ปัญหาในอนาคตได้หรือไม่? UPDATE smallTbl SET smallTbl.importantValue = largeTbl.importantValue FROM smallTableOfPeople smallTbl JOIN largeTableOfPeople largeTbl ON largeTbl.birth_date = smallTbl.birthDate AND DIFFERENCE(TRIM(smallTbl.last_name),TRIM(largeTbl.last_name)) = 4 AND DIFFERENCE(TRIM(smallTbl.first_name),TRIM(largeTbl.first_name)) = 4 WHERE smallTbl.importantValue IS NULL -- The following line …

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