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

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

2
มีความแตกต่างระหว่างการวางนามแฝงคอลัมน์ที่จุดเริ่มต้นหรือจุดสิ้นสุดของคำนิยามคอลัมน์หรือไม่?
ฉันเคยเห็นและเขียนชื่อแทนคอลัมน์เป็นเสมอ SELECT 1 as ColumnName แต่วันนี้เจอคำถามที่ใช้ SELECT ColumnName = 1 มีความแตกต่างในวิธีการเรียกใช้แบบสอบถามทั้งสองนี้อย่างไร หรือมีมาตรฐานในกลุ่ม DBA เกี่ยวกับอันไหนที่จะใช้? ส่วนตัวผมคิดว่า 2 จะง่ายต่อการอ่าน / รักษาสำหรับคำจำกัดความคอลัมน์อีกต่อไป (ตัวอย่างที่ดีที่นี่จากบทความนี้ ) แต่ผมไม่เคยเห็นไวยากรณ์ที่ 2 ก่อนที่จะนำมาใช้ในวันนี้เพื่อให้กำลังสงสัยว่าถ้ามีเหตุผลบางอย่างที่ฉันไม่ควรจะเป็น ใช้มัน

3
ค้นหาผู้ใช้กำพร้า
ใน SQL Server 2005 มีวิธีการค้นหาผู้ใช้ที่ไม่มีอยู่ในระดับเซิร์ฟเวอร์ (บัญชีที่ถูกลบในระดับเซิร์ฟเวอร์ แต่ไม่ได้ถูกแยกจากฐานข้อมูลก่อนที่จะถูกลบ) หรือบัญชีที่ไม่ได้เชื่อมโยง (บัญชีอาจถูกลบที่ระดับเซิร์ฟเวอร์ แต่ไม่ใช่ระดับ db จากนั้นอ่านอีกครั้ง แต่ระดับ db ไม่เคยล้างข้อมูล) ฉันมีเซิร์ฟเวอร์ที่ยุ่งมากและมันก็ยอดเยี่ยมมากถ้ามีคำถามให้เรียกใช้เพื่อค้นหาสิ่งเหล่านี้

2
การตั้งค่า READ UNCOMMITTED เมื่ออ่าน DMV
ฉันเคยเห็นหลายคนโทรSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDมาก่อนอ่านระบบ DMV มีเหตุผลใดที่จะทำเช่นนี้โดยสมมติว่าคุณไม่ได้โทรไปยัง DMV และตารางในธุรกรรมเดียวกันหรือไม่?
12 sql-server  dmv 

1
อัปเกรด SQL Server 2005 เป็น SQL Server 2012
ฉันมีการตั้งค่าสภาพแวดล้อมการทดสอบด้วยสิ่งต่อไปนี้: เครื่องเสมือน (Hyper-V) Windows Server 2008 R2 SP1 (x64 บิต) SP4 นักพัฒนา Windows SQL Server 2005 SP4 (x64 บิต) (ชื่ออินสแตนซ์เริ่มต้น) 1 ฐานข้อมูลพร้อมการจำลองแบบผสานตั้งค่า ... 3 สิ่งพิมพ์ที่มีสมาชิก 2 ราย เรากำลังทดสอบขั้นตอนการอัปเกรดเป็น SQL Server 2012 Developer Edition (sp1) ... ฉันดาวน์โหลด iso สำหรับ 64bit SQL Server 2012 Dev (sp1) จาก MSDN (สำเนาลิขสิทธิ์แบบเต็ม) และเริ่มลงเส้นทางการอัพเกรด ในขั้นตอนสุดท้ายที่เริ่มต้นการตรวจสอบเกณฑ์ที่แตกต่างกันเราพบปัญหาที่แปลกประหลาดตามที่อธิบายไว้ด้านล่าง: Rule …

2
ETL: การแยกข้อมูลจาก 200 ตาราง - การไหลของข้อมูล SSIS หรือ T-SQL แบบกำหนดเอง
จากการวิเคราะห์ของฉันแบบจำลองมิติที่สมบูรณ์สำหรับคลังข้อมูลของเราจะต้องมีการดึงข้อมูลจากแหล่งข้อมูลกว่า 200 ตาราง บางส่วนของตารางเหล่านี้จะถูกดึงมาเป็นส่วนหนึ่งของการโหลดที่เพิ่มขึ้นและอื่น ๆ จะเป็นการโหลดแบบเต็ม โปรดทราบว่าเรามีฐานข้อมูลแหล่งข้อมูลประมาณ 225 รายการด้วยสคีมาเดียวกัน จากสิ่งที่ฉันได้เห็นการสร้างการไหลของข้อมูลอย่างง่าย ๆ ใน SSIS ด้วยแหล่งข้อมูล OLE DB และปลายทาง OLE DB ต้องการคอลัมน์และชนิดข้อมูลที่จะถูกกำหนดในขณะออกแบบ ซึ่งหมายความว่าในที่สุดฉันจะจบลงด้วยการไหลของข้อมูลมากกว่า 200 สำหรับการแยกเพียงอย่างเดียว จากมุมมองการบำรุงรักษาสิ่งนี้ทำให้ฉันกลายเป็นปัญหาใหญ่ ถ้าฉันต้องการทำการเปลี่ยนแปลงกวาดบางอย่างกับรหัสการแยกฉันจะต้องแก้ไขกระแสข้อมูลที่แตกต่างกัน 200 รายการ อีกทางเลือกหนึ่งฉันเขียนสคริปต์ขนาดเล็กซึ่งอ่านฐานข้อมูลต้นฉบับชื่อตารางและคอลัมน์ที่ฉันต้องการแยกจากชุดของตารางข้อมูลเมตา รหัสทำงานในหลายลูปและใช้ไดนามิก SQL เพื่อแยกจากตารางต้นฉบับผ่านเซิร์ฟเวอร์ที่เชื่อมโยงและ OPENQUERY จากการทดสอบของฉันสิ่งนี้ยังไม่เร็วเท่ากับการใช้กระแสข้อมูล SSIS กับแหล่ง OLEDB และปลายทาง ดังนั้นฉันสงสัยว่าฉันมีทางเลือกประเภทใด ความคิดจนถึงขณะนี้รวมถึง: การใช้EZAPIเพื่อสร้างแพ็คเกจ SSIS แบบเป็นโปรแกรมด้วยการไหลของข้อมูลอย่างง่าย ตารางและคอลัมน์ที่จะแยกจะมาจากตารางเมทาดาทาที่กล่าวถึงก่อนหน้านี้ ซื้อซอฟต์แวร์ภายนอก (ส่วนประกอบการไหลของข้อมูลแบบไดนามิก) วิธีที่ดีที่สุดในการเข้าถึงสิ่งนี้คืออะไร? เมื่อพูดถึงการเขียนโปรแกรม. NET ฉันเป็นผู้เริ่มต้นดังนั้นเวลาที่ต้องใช้ในการเพิ่มระดับความรู้พื้นฐานก็เป็นเรื่องที่น่ากังวลเช่นกัน

1
ทำไม SQL Server ไม่สนับสนุนข้อ จำกัด คีย์ต่างประเทศในมุมมอง
ฉันรู้ว่า SQL Server ไม่สนับสนุนการใช้มุมมองเป็นการอ้างอิงสำหรับข้อ จำกัด คีย์ต่างประเทศมีเหตุผล (เช่นบางอย่างเกี่ยวกับตัวแบบเชิงสัมพันธ์) เป็นกรณีนี้หรือไม่ ดูเหมือนว่ามันจะมีประโยชน์ ....
12 sql-server 

1
มิเรอร์ - ไม่สามารถเข้าถึงที่อยู่เครือข่ายเซิร์ฟเวอร์
ฉันติดตั้ง SQL Server 2008 R2 แล้ว มันมีสามกรณี ค่าเริ่มต้น (MSSQLServer) อินสแตนซ์แรก อินสแตนซ์ที่สอง ทั้งหมดนี้คือการเข้าสู่ระบบในฐานะบริการเครือข่าย .. ค่าเริ่มต้นอินสแตนซ์คือเซิร์ฟเวอร์หลักอินสแตนซ์แรกคือมิเรอร์ที่สองอินสแตนซ์คือเซิร์ฟเวอร์พยาน ตอนแรกฉันทำการสำรองข้อมูลทั้งหมดและสำรองข้อมูลธุรกรรมของฐานข้อมูลหลักของฉัน กู้คืนไปยังอินสแตนซ์แรกโดยการรักษาชื่อฐานข้อมูลและสถานะการกู้คืนเดียวกันคือไม่มีการกู้คืน ในที่สุดฉันเริ่ม Mirroring และฉันได้รับข้อความแสดงข้อผิดพลาดสองข้อความที่แสดงด้านล่าง

1
พฤติกรรมของ SQL Server TempDB ในสภาพแวดล้อมของหน่วยความจำขนาดใหญ่
การอ่านคำถามนี้ทำให้ฉันนึกถึงคำถามที่ฉันได้ซักพักหนึ่งแล้ว เรามี SQL Server ที่มี RAM ขนาด 512GB ฐานข้อมูลหลักคือ 450 GB เราเห็นการกระทำค่อนข้างมากใน TempDB (ตกลงฉันคิดว่ามันเป็น "การกระทำค่อนข้างมาก" - อาจไม่ได้!) ฉันติดตั้งเซิร์ฟเวอร์ตัวอย่างของ RamDisk Plus สร้าง ramdrive 50GB ชี้ไปที่ TempDB แล้วไม่เห็นการปรับปรุงประสิทธิภาพเลย การเขียนไปที่ TempDB มักจะส่งผลให้เกิดการเขียนทางกายภาพจริงไปยังดิสก์เสมอหรือเป็น TempDB ที่เขียนโดย SQL Server สำหรับการเขียนที่ล่าช้าเช่นในแคชของระบบไฟล์ Windows ramdisk ไม่มีจุดหมายในสถานการณ์นี้หรือไม่? ฉันรู้ว่า SQL Server 6.5 ได้รับการสนับสนุนสำหรับ TempDB-In-Ram แต่ฉันเห็นว่าเลิกใช้มานานแล้ว!

2
เหตุใดแบบสอบถามนี้จึงไม่ใช้ดัชนีที่ไม่ได้เป็นคลัสเตอร์ของฉันและฉันจะสร้างมันได้อย่างไร
ตามมาถึงคำถามนี้เกี่ยวกับการเพิ่มประสิทธิภาพการค้นหาฉันต้องการทราบว่ามีวิธีในการทำให้ดัชนีของฉันถูกใช้เป็นค่าเริ่มต้นหรือไม่ แบบสอบถามนี้ทำงานในประมาณ 2.5 วินาที: SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; อันนี้ทำงานในประมาณ 33ms: SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31' ORDER BY [DateEntered], [DeviceID]; มีดัชนีคลัสเตอร์ในฟิลด์ [ID] (pk) และมีดัชนีที่ไม่ใช่คลัสเตอร์ใน [DateEntered], [DeviceID] แบบสอบถามแรกใช้ดัชนีคลัสเตอร์แบบสอบถามที่สองใช้ดัชนีที่ไม่ใช่คลัสเตอร์ของฉัน คำถามของฉันคือสองส่วน: ทำไมเนื่องจากแบบสอบถามทั้งสองมีส่วนคำสั่ง WHERE ในฟิลด์ [DateEntered] เซิร์ฟเวอร์จึงใช้ดัชนีคลัสเตอร์ในครั้งแรก แต่ไม่ใช่อันดับที่สองหรือไม่ ฉันจะทำให้ดัชนีที่ไม่ใช่แบบคลัสเตอร์นั้นถูกใช้เป็นค่าเริ่มต้นในแบบสอบถามนี้ได้โดยไม่ต้องสั่งซื้อ (หรือเพราะเหตุใดฉันจึงไม่ต้องการพฤติกรรมนั้น)

4
SQL Server 2012 กำลังวาง [วงเล็บ] ไว้รอบ ๆ ชื่อตารางและคอลัมน์
เมื่อคุณลากโฟลเดอร์คอลัมน์ไปยังหน้าต่างแก้ไขรายการทั้งหมดของคอลัมน์จะถูกเพิ่มโดยไม่มีวงเล็บ หากคุณลากคอลัมน์ทีละรายการพวกเขามีวงเล็บ อย่างไรก็ตามมีการปิดใช้งานหรือไม่ ฉันไม่สามารถหาอะไรในตัวเลือกและพวกเขาเป็นสิ่งที่ทำให้ไขว้เขว

2
อนุญาตให้ผู้ใช้ทำอะไรก็ได้ภายในสคีมาของเขาเอง แต่ไม่ต้องสร้างหรือวางสคีมาเอง
ฉันสร้างสคีมาใน SQL Azure และได้รับอนุญาตจากบทบาทฐานข้อมูลต่อไปนี้: CREATE ROLE myrole AUTHORIZATION dbo; EXEC sp_addrolemember 'myrole', 'myuser'; CREATE SCHEMA myschema AUTHORIZATION dbo; GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole; GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole; ผ่านการอนุญาตที่กำหนดไว้ข้างต้นmyuserสามารถสร้าง / วางสคีมาของเขาเองเพื่อที่จะเอาชนะปัญหาที่ฉันลองใช้สิทธิ์ ALTER ANY SCHEMA …

3
ผลกระทบของการใช้ดัชนีที่ไม่ซ้ำกันที่ไม่ซ้ำกันพร้อมคอลัมน์ครอบคลุมแทนคีย์หลัก
เรามีตารางขนาดใหญ่[MyTable]ซึ่งปัจจุบันมีทั้งPrimary Key, และUnique Non Clustered Indexในคอลัมน์เดียวกัน ( [KeyColumn]) ดัชนี U NC ยังมีคอลัมน์ครอบคลุมเพิ่มเติม การมีทั้ง PK และดัชนี NC ที่ไม่ซ้ำกันในคอลัมน์เดียวกันดูเหมือนซ้ำซ้อนดังนั้นฉันจึงกำลังพิจารณาลบคีย์หลักและใช้ดัชนีที่ไม่ได้ทำคลัสเตอร์ที่ไม่ซ้ำกันเพื่อจุดประสงค์ในการอ้างอิงความสมบูรณ์ โปรดทราบว่าตารางจะทำคลัสเตอร์โดยคอลัมน์อื่นทั้งหมด ie ดังนั้นเรามี: ALTER TABLE [MyTable] ADD CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED ([KeyColumn]) GO และ CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex] ON [MyTable] ([KeyColumn]) INCLUDE ([Column1], [Column2]) GO เท่าที่ฉันรู้มันเป็นไปไม่ได้ที่จะเพิ่มคอลัมน์ครอบคลุมลงในคีย์หลักดังนั้นฉันตั้งใจจะทำ: ปล่อยข้อ จำกัด ของ Foreign Key …

3
SQL Server เก็บข้อมูลในคุณสมบัติกำหนดการงานอย่างไร
ฉันรู้ว่ามีSELECT * FROM msdb..sysjobschedulesแต่ที่เพิ่งแสดงให้เห็นในครั้งต่อไปที่งานมีกำหนดให้ทำงาน ฉันต้องการทราบว่าทั้งหมดนี้ถูกกำหนดและจัดเก็บอย่างไร ดังนั้นมันจะเก็บค่าของ Recurs ทุกวันจันทร์ที่ไหน
12 sql-server  t-sql  jobs 

3
ขนาดฐานข้อมูลเริ่มต้นของ PostgreSQL
คำถามของฉันมี 2 ส่วน มีวิธีการระบุขนาดเริ่มต้นของฐานข้อมูลใน PostgreSQL หรือไม่? หากไม่มีคุณจะจัดการกับการแตกแฟรกเมนต์อย่างไรเมื่อฐานข้อมูลเติบโตขึ้นตามกาลเวลา ฉันเพิ่งย้ายจาก MSSQL ไปยัง Postgres และหนึ่งในสิ่งที่เราทำในโลก MSSQL เมื่อสร้างฐานข้อมูลคือการระบุขนาดเริ่มต้นของฐานข้อมูลและบันทึกธุรกรรม การกระจายตัวที่ลดลงนี้และประสิทธิภาพที่เพิ่มขึ้นโดยเฉพาะอย่างยิ่งถ้าขนาด "ปกติ" ของฐานข้อมูลเป็นที่รู้จักกันล่วงหน้า ประสิทธิภาพของฐานข้อมูลของฉันลดลงตามขนาดที่เพิ่มขึ้น ตัวอย่างเช่นปริมาณงานที่ฉันวางผ่านตามปกติใช้เวลา 10 นาที เมื่อฐานข้อมูลเติบโตขึ้นเวลานี้จะเพิ่มขึ้น การทำ VACUUM, VACUUM FULL และ VACUUM FULL ANALYZE ไม่ปรากฏขึ้นเพื่อแก้ไขปัญหา สิ่งที่แก้ปัญหาด้านประสิทธิภาพคือการหยุดฐานข้อมูลแยกส่วนไดรฟ์แล้วทำการ VACUUM FULL ANALYZE ใช้เวลาทดสอบประสิทธิภาพของฉันกลับไปเป็น 10 นาทีเดิม สิ่งนี้ทำให้ฉันสงสัยว่าการแตกออกเป็นส่วน ๆ คือสิ่งที่ทำให้ฉันเจ็บปวด ฉันไม่สามารถค้นหาการอ้างอิงถึงการจองพื้นที่ตาราง / ฐานข้อมูลใน Postgres ได้ ฉันกำลังใช้คำศัพท์ที่ไม่ถูกต้องและไม่พบสิ่งใดเลยหรือมีวิธีอื่นในการลดการแตกแฟรกเมนต์ของระบบไฟล์ใน Postgres ตัวชี้ใด ๆ …

3
ทำไมคำสั่งซื้อของฉันเรียงลำดับสองตารางก่อนยกเว้น (ช้า) และไม่ใช่หลัง (เร็ว)
ปริศนาตัวเพิ่มประสิทธิภาพการสืบค้น SQL Server 2008 R2 เรามีสองตารางทั้งสองมี 9 ล้านแถว 70,000 แถวนั้นแตกต่างกันแถวอื่นจะเหมือนกัน อย่างรวดเร็ว 13 วินาที select * from bigtable1 except select * from similar_bigtable2 นี่จะเรียงลำดับเอาต์พุตและยังรวดเร็ว 13 วินาทีเช่นกัน select * into #q from bigtable1 except select * from similar_bigtable2 select * from #q order by sort_column ในขณะนี้ช้ามาก: ;with q as ( select * …

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