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

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

1
แสดงรายการหน้า ROW_OVERFLOW_DATA สำหรับตารางที่ระบุ
ฉันพยายามรับรายการหน้าสำหรับตารางที่มีแถวที่มี ROW_OVERFLOW_DATA ฉันสามารถรับรายการของหน้าที่จัดสรรจาก DMV ที่ไม่มีเอกสารsys.db_db_database_page_allocationsแต่ดูเหมือนจะไม่มีหน้า ROW_OVERFLOW_DATA ที่แสดงรายการในผลลัพธ์ของ DMV นั้น มี DMV อื่นที่ฉันไม่สามารถค้นหาได้หรือไม่ ตัวอย่างที่ตรวจสอบได้น้อยที่สุดสมบูรณ์และ (หวังว่า!): USE tempdb; IF OBJECT_ID(N'dbo.t', N'U') IS NOT NULL DROP TABLE dbo.t; GO CREATE TABLE dbo.t ( rownum int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED , on_row_data varchar(30) NOT NULL DEFAULT ('on_row_data') , off_row_data varchar(MAX) NOT NULL …

1
N'Șc 'พิจารณาคีย์ที่ซ้ำกันของ N'C' โดยใช้การเปรียบเทียบ Latin1_General_CI_AS
ฉันมีตารางที่มีคีย์เฉพาะที่มีNVARCHAR(50)คอลัมน์ (ถูกต้องหรือไม่ แต่มีอยู่) ดังนั้นเมื่อพยายามที่จะแทรกȘcหรือC(ไม่สำคัญกับคำสั่งของเม็ดมีด) มันจะแตกบนเม็ดที่สองเนื่องจากปัญหาการเรียง นี่คือข้อผิดพลาด: (รับผลกระทบ 1 แถว) ข่าวสารเกี่ยวกับ 2601, ระดับ 14, สถานะ 1, บรรทัดที่ 16 ไม่สามารถแทรกแถวคีย์ซ้ำในวัตถุ 'dbo.testT' ด้วยดัชนีเฉพาะ 'IX_TestT' ค่าคีย์ที่ซ้ำกันคือ (C) เลือกผลตอบแทน: Latin1_General_CI_ASเปรียบเทียบค่าเริ่มต้นฐานข้อมูลเป็น ใช้เวลาดูวิธีการแก้ปัญหาโดยไม่ต้องเปลี่ยนโครงสร้างที่มีอยู่แล้ว แต่ไม่สามารถหาวิธีทำงานได้ พยายามเรียงความและรวมที่แตกต่างกันทุกอย่างล้มเหลว อ่าน ( ที่นี่และที่นี่ ) เกี่ยวกับการขยายตัวอักขระและอื่น ๆ ยังคงติดอยู่ นี่คือตัวอย่างรหัสที่ฉันใช้เพื่อทำซ้ำปัญหารู้สึกฟรีเพื่อแก้ไขและแนะนำสิ่งที่สามารถช่วยแก้ปัญหานี้ได้ CREATE TABLE testT ( [Default_Collation] [NVARCHAR] (50) COLLATE DATABASE_DEFAULT, [Latin1_General_CI_AS] [NVARCHAR] (50) COLLATE Latin1_General_CI_AS, …

2
MAXDOP = 1, คำแนะนำการสืบค้นและเกณฑ์ค่าใช้จ่ายสำหรับความเท่าเทียม
หากมีการMAXDOPตั้งค่าอินสแตนซ์ที่ 1 และคำแนะนำแบบสอบถามถูกใช้เพื่ออนุญาตให้แบบสอบถามเฉพาะขนานกันเป็นเกณฑ์ต้นทุนสำหรับค่า Parallelism ที่ SQL ยังคงใช้เพื่อตัดสินใจว่าจริงหรือไม่ขนานกันหรือไม่ ฉันไม่สามารถขุดข้อมูลเฉพาะนี้ได้แม้ว่าลิงก์นี้แสดงให้เห็นว่า CTFP จะถูกเพิกเฉยถ้าMAXDOPเป็น 1 สิ่งนี้สมเหตุสมผลโดยไม่มีคำแนะนำแบบสอบถามเนื่องจากไม่มีการร้องขอโดยไม่คำนึงถึงต้นทุนจะขนานกันเมื่อMAXDOPเป็น 1 ใครช่วยให้ฉันรู้ว่าพฤติกรรมที่คาดหวังของคำขอทั้งสองนี้จะเป็นอย่างไร ตัวอย่างที่ 1: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 30 ตัวอย่างที่ 2: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 70

1
ทำไม NOLOCK ทำการสแกนด้วยการกำหนดตัวแปรให้ช้าลง?
ฉันต่อสู้กับ NOLOCK ในสภาพแวดล้อมปัจจุบันของฉัน อาร์กิวเมนต์หนึ่งที่ฉันได้ยินคือโอเวอร์เฮดของการล็อกทำให้การสืบค้นช้าลง ดังนั้นฉันจึงวางแผนการทดสอบเพื่อดูว่าค่าใช้จ่ายนี้จะมากแค่ไหน ฉันค้นพบว่า NOLOCK จริง ๆ แล้วการสแกนของฉันช้าลง ตอนแรกฉันดีใจ แต่ตอนนี้ฉันสับสน การทดสอบของฉันไม่ถูกต้องอย่างใด? NOLOCK ไม่ควรอนุญาตให้สแกนเร็วขึ้นเล็กน้อยจริง ๆ หรือ เกิดอะไรขึ้นที่นี่ นี่คือสคริปต์ของฉัน: USE TestDB GO --Create a five-million row table DROP TABLE IF EXISTS dbo.JustAnotherTable GO CREATE TABLE dbo.JustAnotherTable ( ID INT IDENTITY PRIMARY KEY, notID CHAR(5) NOT NULL ) INSERT dbo.JustAnotherTable SELECT …

3
การให้สิทธิ์ ALTER TABLE ได้รับอันตรายอย่างไร
ลองนึกภาพสถานการณ์ต่อไปนี้ CREATE DATABASE test GO USE test; CREATE TABLE dbo.Customer ( CustomerId INT, Email VARCHAR(100), SensitiveData VARCHAR(20) ); INSERT INTO dbo.Customer VALUES (1,'abc@foo.com','12346789'); ณ จุดหนึ่งกระบวนการ ETL จะถูกเขียนที่ดำเนินการบางกิจกรรมในtestฐานข้อมูล CREATE USER etlUser WITHOUT LOGIN; /*For demo purposes*/ CREATE TABLE dbo.StagingTable ( StagingTableId INT, SomeData VARCHAR(100), ) GRANT UPDATE,INSERT,DELETE,SELECT,ALTER ON dbo.StagingTable TO etlUser; …

2
ฐานข้อมูล SQL Server พร้อมที่จะรับแบบสอบถามเมื่อใด
ในไฟล์บันทึกข้อผิดพลาด SQL Server ฉันพบบรรทัดต่อไปนี้: 2018-02-22 14:10:58.95 spid17s Starting up database 'msdb'. 2018-02-22 14:10:58.95 spid16s Starting up database 'ReportServer'. 2018-02-22 14:10:58.95 spid18s Starting up database 'ReportServerTempDB'. 2018-02-22 14:10:58.95 spid19s Starting up database 'XYZ'. ถ้าฉันตรวจสอบสถานะของฐานข้อมูล XYZ ก่อนหน้านี้มันกำลังONLINEใช้คำสั่งต่อไปนี้: SELECT state_desc FROM sys.databases WHERE name='XYZ' ... แต่เมื่อฉันพยายามเชื่อมต่อกับฐานข้อมูลนี้โดยใช้แอปพลิเคชัน C # จะไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ ข้อผิดพลาดคือ: การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'asd' สาเหตุ: …

1
ฟังก์ชันใดที่เสนอราคาตัวระบุใน dynamic-sql กับ SQL Server
วิธีการ SQL Server ของตัวระบุการอ้างอิงอย่างปลอดภัยสำหรับการสร้าง sql แบบไดนามิกคืออะไร MySQL มี quote_identifier PostgreSQL มี quote_ident ฉันจะมั่นใจได้อย่างไรว่าได้รับชื่อคอลัมน์ที่สร้างขึ้นแบบไดนามิกสำหรับคำสั่งที่สร้างขึ้นแบบไดนามิกว่าคอลัมน์นั้นไม่ใช่การโจมตี SQL-injection สมมติว่าฉันมีคำสั่ง SQL SELECT [$col] FROM table; ซึ่งเป็นหลักเช่นเดียวกับ 'SELECT [' + $col + '] FROM table;' จะหยุดการโจมตีฉีดอะไรที่ $col = "name] FROM sys.objects; \r\n DROP TABLE my.accounts; \r\n\ --"; ที่เกิดขึ้นใน SELECT [name] FROM sys.objects; DROP TABLE my.accounts; -- …

2
หากไม่มีแผนที่จะถอนการติดตั้งโฟลเดอร์ Log and Update Cache ในโฟลเดอร์ Setup Bootstrap จะถูกลบออกได้หรือไม่?
ฉันมี SQL Server หลายเวอร์ชันใช้สำหรับการทดสอบติดตั้งบนแล็ปท็อปของฉัน (2012, 2014, 2016 และ 2017) ฉันสังเกตเห็นเมื่อวันก่อนว่ามีโฟลเดอร์ที่มีไฟล์เวอร์ชันก่อนหน้าตลอดการอัพเดท (SPs, CUs) ในทุกรุ่นมีพื้นที่ว่างพอสมควร: (ในC: \ Program ไฟล์ (x86) \ Microsoft SQL Server \ ) 110\Setup Bootstrap\Log - 91.8 MB (818 files) 110\Setup Bootstrap\Update Cache - 608 MB (2,382 files) (โฟลเดอร์ทั้งหมดด้านล่างอยู่ภายใน: C: \ Program Files \ Microsoft SQL Server \ ) …

1
คำสั่ง bcp ไวยากรณ์ไม่ถูกต้องใกล้กับ ' ' ตัวละครเป็นจริง:“ ä”
ฉันมี mssql-serverและmssql-toolsติดตั้งบน Ubuntu (Linux) เมื่อฉันพยายามส่งออกข้อมูลด้วยคำสั่งbcpโดยใช้บรรทัดคำสั่งต่อไปนี้: bcp DBname.dbo.Täble_Name out Täble_Name -c -k -S127.0.0.1 -Usa -PpassWord -r ~ ฉันได้รับข้อผิดพลาดนี้: SQLState = 37000, NativeError = 102 Error = [Microsoft] [ODBC Driver 13 สำหรับ SQL Server] [SQL Server] ไวยากรณ์ไม่ถูกต้องใกล้ ' ' คือ�ä หากฉันล้อมรอบTäble_Nameด้วยเครื่องหมายวงเล็บ: bcp DBname.dbo.[Täble_Name] out Täble_Name -c -k -S127.0.0.1 -Usa -PpassWord -r ~ …

2
การเลือกดัชนีแบบกลุ่ม - PK หรือ FK?
ฉันมีตารางSQL Server 2014ที่มีลักษณะดังต่อไปนี้: OrderId int not null IDENTITY --this is the primary key column OrderDate datetime2 not null CustomerId int not null Description nvarchar(255) null บางคนในทีมของฉันแนะนำว่าควรทำดัชนีคลัสเตอร์OrderIdแต่ฉันคิดว่าCustomerId+ OrderIdจะเป็นตัวเลือกที่ดีกว่าด้วยเหตุผลต่อไปนี้: แบบสอบถามเกือบทั้งหมดจะมองWHERE CustomerId = @paramไม่ใช่OrderId CustomerIdเป็น foreign key ไปยังCustomerตารางดังนั้นการมีดัชนีคลัสเตอร์ที่CustomerIdควรเพิ่มความเร็วในการรวม แม้ว่าCustomerIdจะไม่ซ้ำกันการมีOrderIdคอลัมน์เพิ่มเติมที่ระบุไว้ในดัชนีจะทำให้มั่นใจได้ว่าไม่ซ้ำกัน (เราสามารถใช้UNIQUEคำหลักเมื่อสร้างดัชนีคลัสเตอร์ในคอลัมน์ 2 คอลัมน์เหล่านั้นเพื่อหลีกเลี่ยงค่าใช้จ่ายที่ไม่มีเอกลักษณ์) เมื่อแทรกข้อมูลแล้วCustomerIdและOrderIdไม่เปลี่ยนแปลงดังนั้นแถวเหล่านี้จะไม่ย้ายไปหลังจากการเขียนครั้งแรก การเข้าถึงข้อมูลเกิดขึ้นผ่านทาง ORM ที่ร้องขอคอลัมน์ทั้งหมดตามค่าเริ่มต้นดังนั้นเมื่อมีการค้นหาตามCustomerIdมาดัชนีดัชนีคลัสเตอร์จะสามารถให้คอลัมน์ทั้งหมดโดยไม่ต้องทำงานเพิ่มเติมใด ๆ ที่ไม่CustomerIdและOrderIdเสียงเช่นวิธีการเลือกที่ดีที่สุดที่กำหนดข้างต้น หรือเป็นOrderIdของตัวเองดีกว่าเพราะมันเป็นคอลัมน์เดียวที่รับประกันความโดดเด่นด้วยตัวเอง? ขณะนี้ตารางมีดัชนีคลัสเตอร์บนOrderIdและดัชนีที่CustomerIdไม่ได้ทำคลัสเตอร์แต่มันไม่ครอบคลุมดังนั้นเนื่องจากเราใช้ ORM และมีการร้องขอคอลัมน์ทั้งหมดจึงเป็นงานพิเศษเพื่อดึงข้อมูลออกมา ดังนั้นเมื่อโพสต์นี้ฉันพยายามพิจารณาปรับปรุงประสิทธิภาพด้วย …

2
SQL Server บน Linux แฮงค์เมื่อเริ่มต้นครั้งแรกไม่มีข้อผิดพลาดและไม่มีไฟล์ ErrorLog ใหม่ที่อัพเดต
ฉันใช้ SQL Server 2017, Release Candidate 2 (RC2) บน Linux (Ubuntu 16.04) เมื่อเซิร์ฟเวอร์เริ่มต้นขึ้น SQL Server มักจะเริ่มต้นเช่นกัน แต่ด้วยเหตุผลบางอย่าง SQL Server จะไม่เริ่มทำงานอีกต่อไป อย่างน้อยฉันไม่สามารถเชื่อมต่อโดยใช้sqlcmd ฉันได้รับการหมดเวลา ODBC ( "Sqlcmd: ข้อผิดพลาด: Microsoft ODBC Driver 13 สำหรับ SQL Server ") ข้อผิดพลาดทุกครั้งในขณะนี้: Login timeout expired. TCP Provider: Error code 0x2749. A network-related or instance-specific error has occurred …

1
การเชื่อมต่อกับเซิร์ฟเวอร์ MS SQL ภายในจากไคลเอนต์ GUI
ฉันยังใหม่กับ SQL และเซิร์ฟเวอร์ฐานข้อมูล ฉันเพิ่งใช้ SQL Server Express และเข้าถึงฐานข้อมูลของฉันโดยใช้ SQL Server Management Studio บน Windows ตอนนี้ฉันกำลังพยายามตั้งค่าที่คล้ายกันบนเครื่อง Linux ฉันต้องการสร้างอินสแตนซ์ SQL Server ในเครื่องของฉันแล้วใช้SQLectronเป็นไคลเอนต์ GUI สำหรับสอบถามฐานข้อมูลของฉัน ฉันใช้ Manjaro Linux และติดตั้งแพ็คเกจของฉันจาก AUR จนถึงขณะนี้ผมได้ติดตั้งmssql-server, และmssql-tools sqlectron-guiฉันได้รันsudo /opt/mssql/bin/mssql-conf setupคำสั่งเพื่อ (ฉันเชื่อว่า) ตั้งค่าเซิร์ฟเวอร์ภายใน หลังจากทำเช่นนั้นการรันคำสั่งsystemctl status mssql-serverจะส่งคืนสิ่งนี้: [kev @ XPS-Manjaro ~] สถานะ $ systemctl mssql-server ● mssql-server.service - โปรแกรมฐานข้อมูล Microsoft …

4
เหตุใดการผสมการเรียงคอลัมน์ในฐานข้อมูลเดียวจึงถือว่าไม่ดี
มีสองเหตุผลที่ทำให้ฉันถามคำถามนี้: tSQLt เฟรมเวิร์กการทดสอบ T-SQL tSQLt พิจารณาว่าเป็นปัญหาของ"High Severity"เมื่อมีคอลัมน์ที่มีการจัดเรียงที่ไม่ใช่ค่าเริ่มต้น ผู้เขียนการทดสอบระบุสิ่งต่อไปนี้: ฉันไม่แนะนำให้ทุกคอลัมน์สตริงควรมีการเปรียบเทียบที่ตรงกับการเปรียบเทียบเริ่มต้นสำหรับฐานข้อมูล ฉันขอแนะนำว่าเมื่อมันแตกต่างกันควรมีเหตุผลที่ดี กระนั้นความรุนแรงของการทดสอบที่ล้มเหลวก็ถือว่าสูง การปรับใช้ Octopus ในขณะที่กำหนดค่าเซิร์ฟเวอร์การปรับใช้ Octopus การตั้งค่าล้มเหลวด้วยข้อผิดพลาด FATAL ในระหว่างการเริ่มต้นของ OctopusServer-instance บทความที่เกี่ยวข้องกับข้อผิดพลาดข้อความไม่ได้อธิบายว่าทำไมนี้เป็นความต้องการ แต่เพียงระบุว่ามันจะเป็นความจำเป็นสำหรับการใช้งานในอนาคตจากการรวมทั้งปลาหมึกรุ่น 3.8 ในฐานะที่เป็นกล่องด้านข้างแพคเกจ CI-tool ของ RedGate นั้นเป็นชุดDLM Automation Suiteรองรับการปรับใช้ที่มีการเปรียบเทียบที่หลากหลายโดยไม่มีการร้องเรียน คำแนะนำในการคงการเรียงคอลัมน์ทั้งหมดไว้เป็นค่าเริ่มต้นของฐานข้อมูลดูเหมือนจะเป็นแนวทางหรือแนวทางปฏิบัติที่ดีที่สุดสำหรับฉัน เหตุใดจึงถือว่าข้อผิดพลาดร้ายแรงบางรายการ

1
SQLServer Upgrade Advisor 2014 หยุดทำงาน
ฉันพยายามเรียกใช้ SQL Server Upgrade Advisor 2014 กับเซิร์ฟเวอร์ SQL Server 2008 ทุกอย่างดูดีเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ 2008 และฉันสามารถเลือกฐานข้อมูลที่ฉันต้องการวิเคราะห์ แต่เมื่อเปิดตัวมันจะทำงานตลอดไปโดยไม่ทำอะไรเลย (อยู่ที่ขั้นตอนการวิเคราะห์กฎ: 0/112 ) เกิดอะไรขึ้นและฉันจะแก้ไขได้อย่างไร ทั้ง SQL Server 2008 และ 2014 เป็นรุ่น Express และติดตั้งบนแล็ปท็อปของฉัน น่าเสียดายนี่เป็นวิธีเดียวที่ฉันพบว่าเรียกใช้ Upgrade Advisor (มีข้อ จำกัด มากเกินไปที่จะเรียกใช้บนฐานข้อมูล prod / dev จริง) อินสแตนซ์ SQL 2008 อยู่กับ SP3 เป็นสิ่งจำเป็น Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 …

3
ปัญหาประสิทธิภาพการทำงานที่สำคัญใน SQL Server ที่ผลิตของเราฉันจะแก้ไขปัญหานี้ได้อย่างไร
คำถามนี้เป็นคำถามที่ตามมาสำหรับคำถามนี้: ปัญหาประสิทธิภาพการทำงานที่แปลกกับ SQL Server 2016 ตอนนี้เรามีประสิทธิภาพด้วยระบบนี้ แม้ว่าฐานข้อมูลแอปพลิเคชันอื่นจะถูกเพิ่มไปยัง SQL Server นี้ตั้งแต่โพสต์ล่าสุดของฉัน นี่คือสถิติของระบบ: 128 GB RAM (หน่วยความจำสูงสุด 110GB สำหรับ SQL Server) 4 คอร์ที่ 2.6 GHz การเชื่อมต่อเครือข่าย 10 GBit ที่เก็บข้อมูลทั้งหมดใช้ SSD ไฟล์โปรแกรมไฟล์บันทึกไฟล์ฐานข้อมูลและ tempdb อยู่บนพาร์ติชันแยกต่างหากของเซิร์ฟเวอร์ Windows Server 2012 R2 VMware เวอร์ชัน HPE-ESXi-6.0.0-Update3-iso-600.9.7.0.17 เครื่องมือ VMware รุ่น 10.0.9 สร้าง 3917699 Microsoft SQL Server 2016 (SP1) (KB3182545) …

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