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

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

2
ปิดใช้งานการตรวจสอบ Schema On Function / Stored Procedure
ฉันพยายามทำให้กระบวนการที่ดำเนินการเปลี่ยนแปลงกับฐานข้อมูล SQL Server 2008 R2 เป็นไปโดยอัตโนมัติ กระบวนการที่ฉันวางไว้และสร้างโพรซีเดอร์และฟังก์ชันที่เก็บไว้ของฉันใหม่รวมถึงเรียกใช้สคริปต์เพื่อเปลี่ยนตาราง / คอลัมน์ / ข้อมูล น่าเสียดายที่สคริปต์ตัวใดตัวหนึ่งต้องใช้ฟังก์ชันใดฟังก์ชันหนึ่งก่อน แต่ฉันไม่สามารถเรียกใช้การเปลี่ยนแปลง proc / ฟังก์ชั่นที่เก็บไว้ได้ทั้งหมดเพราะมันอาศัยคอลัมน์ที่เพิ่มเข้ามาจากสคริปต์การเปลี่ยนแปลงตาราง / คอลัมน์ / ข้อมูลก่อน ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะเรียกใช้โพรซีเดอร์และฟังก์ชันที่เก็บไว้โดยไม่มี SQL Server ตรวจสอบคอลัมน์ที่ใช้ในการกำหนดฟังก์ชัน / SP? ฉันพยายามค้นหา แต่ไม่พบเงื่อนไขหรือคำสั่งเพื่อเปิดใช้งานสิ่งนี้

2
สองเซสชันสร้าง #temp tables ด้วยชื่อเดียวกันได้หรือไม่
ฉันกำลังสร้างตารางชั่วคราว ( #myTable) และใช้เคอร์เซอร์ สิ่งนี้สร้างปัญหาหรือไม่เมื่อผู้ใช้พร้อมกันเข้าถึงเคอร์เซอร์ผ่านแอปพลิเคชันของฉัน ฉันอนุญาตให้สร้างตารางชั่วคราวแยกด้วยชื่อเดียวกันได้หรือไม่ ต่อไปนี้เป็นตัวอย่างรหัส: Open cursor; Fetch Next from cursor into @Variable_Temp_Table_Name; Create table #myTable(pk int) While @@Fetch_Status = 0 Begin Fetch Next from cursor into @Variable_Temp_Table_Name; End

1
ผู้ประกอบการใช้ tempdb ในการรั่วไหลของข้อมูลระหว่างการดำเนินการกับระดับที่หก
ฉันกำลังดิ้นรนเพื่อลดต้นทุนของการดำเนินการเรียงลำดับในแผนแบบสอบถามด้วยOperator usedtempdb คำเตือนto spill data during execution with spill level 2 ฉันพบโพสต์หลายรายการที่เกี่ยวข้องกับข้อมูลการรั่วไหลในระหว่างการดำเนินการกับการรั่วไหลระดับ 1แต่ไม่ใช่ระดับ 2 ดูเหมือนว่าระดับ 1 จะทำให้สถิติล้าสมัยแล้วระดับ 2 เป็นอย่างไร level 2ฉันไม่สามารถหาอะไรที่เกี่ยวข้องกับ ฉันพบบทความนี้น่าสนใจมากที่เกี่ยวข้องกับคำเตือนการเรียง: อย่าเพิกเฉยต่อคำเตือนการเรียงลำดับใน SQL Server เซิร์ฟเวอร์ SQL ของฉัน Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) 17 มิถุนายน 2016 19:14:09 ลิขสิทธิ์ (c) Microsoft Corporation รุ่นองค์กรองค์กร (64 บิต) บน Windows …


4
สร้างฐานข้อมูลสิทธิ์ปฏิเสธในฐานข้อมูล 'ต้นแบบ' ไม่สามารถรับสิทธิ์
ฉันกำลังสร้างฐานข้อมูลในเซิร์ฟเวอร์ sql และแสดงข้อผิดพลาดที่"CREATE DATABASE permission denied in database 'master'" ฉันใช้เข้าสู่ระบบของผู้ดูแลระบบในตัวเอง ฉันต้องทำอะไร? กรุณาแนะนำการแก้ไข!

3
เหตุใดข้อความค้นหาจึงถูกแยกวิเคราะห์ในลักษณะที่ไม่อนุญาตให้ใช้ชื่อแทนคอลัมน์ในส่วนใหญ่
ในขณะที่พยายามเขียนแบบสอบถามฉันพบ (วิธีที่ยาก) ที่ SQL Server แยกวิเคราะห์ WHEREs ในแบบสอบถามนานก่อนที่จะแยกวิเคราะห์ SELECT เมื่อดำเนินการแบบสอบถาม เอกสาร MSDNกล่าวว่าเพื่อแยกทั่วไปตรรกะเป็นเช่นนั้น SELECT จะแยกกันเกือบที่ผ่านมา (จึงทำให้เกิดการ "ไม่มีวัตถุเช่น [นามแฝง]" ข้อผิดพลาดเมื่อพยายามที่จะใช้นามแฝงคอลัมน์ในข้ออื่น ๆ ) มีแม้กระทั่งข้อเสนอแนะเพื่อให้สามารถใช้นามแฝงได้ทุกที่ซึ่งทีมงานของ Microsoft อ้างถึงปัญหาการปฏิบัติตามมาตรฐาน ANSI (ซึ่งแสดงให้เห็นว่าพฤติกรรมนี้เป็นส่วนหนึ่งของมาตรฐาน ANSI) ในฐานะโปรแกรมเมอร์ (ไม่ใช่ DBA) ฉันพบว่าพฤติกรรมนี้ค่อนข้างสับสนเนื่องจากดูเหมือนว่าฉันจะเอาชนะจุดประสงค์ของการมีชื่อแทนคอลัมน์เป็นส่วนใหญ่ (หรืออย่างน้อยที่สุดนามแฝงคอลัมน์อาจทำให้มีประสิทธิภาพมากขึ้นหากพวกเขาเป็น แยกวิเคราะห์ก่อนหน้านี้ในการดำเนินการค้นหา) เนื่องจากสถานที่เดียวที่คุณสามารถใช้นามแฝงที่แท้จริงคือในการสั่งซื้อ ในฐานะโปรแกรมเมอร์ดูเหมือนว่าจะไม่มีโอกาสมากสำหรับการทำแบบสอบถามที่มีประสิทธิภาพสะดวกและแห้งมากขึ้น ดูเหมือนว่ามันเป็นปัญหาที่เห็นได้ชัดว่ามันมีเหตุผลแล้วว่ามีเหตุผลอื่น ๆ สำหรับการตัดสินใจว่าชื่อแทนคอลัมน์ไม่ควรได้รับอนุญาตในสิ่งอื่นใดนอกเหนือจาก SELECT และ ORDER BY แต่เหตุผลเหล่านั้นคืออะไร
16 sql-server  alias 

2
จะเกิดอะไรขึ้นเมื่อไม่มีหน่วยความจำกายภาพเหลืออยู่สำหรับ SQL Server
ในขณะที่ Google กำลังค้นหาข้อมูลที่ขัดแย้งกัน บางเว็บไซต์ระบุว่าเมื่อไม่มีหน่วยความจำกายภาพเหลืออยู่สำหรับข้อมูล SQL Server จะย้ายข้อมูลที่มีอยู่แล้วลงใน TEMPDB (ดู: SQL Server: Demystifying TempDb และคำแนะนำ ) แต่เว็บไซต์อื่น ๆ ระบุว่าเมื่อมีหน่วยความจำกายภาพเหลืออยู่ไม่เพียงพอระบบปฏิบัติการสามารถใช้ PAGE FILE และย้ายข้อมูลจากหน่วยความจำกายภาพไปยังมัน (ดูหน้าไฟล์สำหรับ SQL Server ) ฉันสงสัยว่า SQL Server เขียนข้อมูลเมื่อใดหน่วยความจำกายภาพหมด? หากต้องการ tempdb หรือไปยังไฟล์หน้า OS? หรืออาจจะทั้งคู่?

2
การใช้ขนาดคอลัมน์ใหญ่เกินความจำเป็น
ฉันกำลังสร้างฐานข้อมูล SQL Server กับคนอื่น หนึ่งในตารางมีขนาดเล็ก (6 แถว) พร้อมข้อมูลที่อาจคงที่ มีความเป็นไปได้จากระยะไกลว่าจะมีการเพิ่มแถวใหม่ ตารางมีลักษณะดังนี้: CREATE TABLE someTable ( id int primary key identity(1,1) not null, name varchar(128) not null unique ); INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here'); ฉันกำลังดูความยาวถ่านของnameคอลัมน์นั้นและฉันคิดว่าค่าของมันอาจจะไม่ใหญ่กว่าพูด 32 ตัวอักษรอาจจะไม่ใหญ่กว่า 24. มีประโยชน์กับการเปลี่ยนคอลัมน์นี้เป็นหรือไม่ เช่นvarchar(32)? นอกจากนี้มีข้อได้เปรียบใด ๆ หรือไม่ที่จะรักษาขนาดคอลัมน์เริ่มต้นให้เป็นทวีคูณของ 4, …

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

1
สร้างฐานข้อมูลบนพาร์ติชัน RAW ไม่ทำงานอีกต่อไป?
ฉันพยายามที่จะสร้างฐานข้อมูลโดยใช้สองดิบคือพาร์ทิชันที่ยังไม่ฟอร์แมต Microsoft เอกสารระบุว่าคุณสามารถทำได้คุณเพียงแค่ระบุตัวอักษรไดรฟ์ของพาร์ทิชันดิบเช่นเดียวกับใน: CREATE DATABASE DirectDevice ON (NAME = DirectDevice_system, FILENAME = 'S:') LOG ON (NAME = DirectDevice_log, FILENAME = 'T:') อย่างไรก็ตาม SQL Server 2017 ส่งคืนข้อผิดพลาดนี้: ข่าวสารเกี่ยวกับ 5170 ระดับ 16 สถานะ 4 บรรทัด 1 ไม่สามารถสร้างไฟล์ 'S:' ได้เนื่องจากมีอยู่แล้ว เปลี่ยนพา ธ ของไฟล์หรือชื่อไฟล์แล้วลองดำเนินการอีกครั้ง เกี่ยวกับข้อความ 1802 ระดับ 16 สถานะ 4 บรรทัดที่ 1 สร้างฐานข้อมูลล้มเหลว ไม่สามารถสร้างชื่อไฟล์บางรายการ …

1
เหตุใด CHECKDB จึงอ่านไฟล์บันทึกธุรกรรมบนฐานข้อมูลที่มีตารางปรับแต่งหน่วยความจำ
tl; dr : เหตุใด CHECKDB จึงอ่านบันทึกธุรกรรมสำหรับฐานข้อมูลผู้ใช้ที่มีตารางเพิ่มประสิทธิภาพหน่วยความจำ ปรากฏว่า CHECKDB กำลังอ่านไฟล์บันทึกธุรกรรมของฐานข้อมูลผู้ใช้เมื่อตรวจสอบฐานข้อมูลของฉันโดยเฉพาะฐานข้อมูลที่ใช้ตาราง OLTP ในหน่วยความจำ CHECKDB สำหรับฐานข้อมูลนี้ยังคงเสร็จสิ้นในระยะเวลาที่เหมาะสมดังนั้นฉันจึงอยากรู้เกี่ยวกับพฤติกรรม แต่มันเป็นระยะเวลายาวนานที่สุดสำหรับ CHECKDB ของฐานข้อมูลทั้งหมดในอินสแตนซ์นี้ ในการตรวจสอบCHECKDB จากทุกมุมมองของมหากาพย์ Paul Paulal : คำอธิบายที่สมบูรณ์ของขั้นตอน CHECKDB ทั้งหมดฉันเห็นว่า CHECKDB pre-SQL 2005 CHECKDB ใช้ในการอ่านบันทึกเพื่อให้ได้มุมมองที่สอดคล้องกันของฐานข้อมูล แต่เนื่องจากนี่เป็น 2016 จึงใช้สแน็ปช็อตฐานข้อมูลภายใน อย่างไรก็ตามหนึ่งในข้อกำหนดเบื้องต้นสำหรับสแน็ปช็อตคือ: ฐานข้อมูลต้นทางต้องไม่มีกลุ่มไฟล์ MEMORY_OPTIMIZED_DATA ฐานข้อมูลผู้ใช้ของฉันมีหนึ่งในกลุ่มไฟล์เหล่านี้ดังนั้นจึงดูเหมือนว่าสแน็ปช็อตอยู่นอกตาราง ตามเอกสาร CHECKDB : หากไม่สามารถสร้างสแน็ปช็อตหรือระบุ TABLOCK ได้ DBCC CHECKDB จะได้รับการล็อกเพื่อให้ได้ความสอดคล้องที่จำเป็น ในกรณีนี้จำเป็นต้องใช้การล็อกฐานข้อมูลแบบเอกสิทธิ์เฉพาะบุคคลเพื่อทำการตรวจสอบการจัดสรรและจำเป็นต้องใช้การล็อกตารางแบบแบ่งใช้เพื่อทำการตรวจสอบตาราง โอเคเรากำลังทำการล็อกฐานข้อมูลและล็อคตารางแทนสแนปชอต แต่นั่นก็ไม่ได้อธิบายว่าทำไมมันต้องอ่านบันทึกการทำธุรกรรม แล้วอะไรล่ะ ฉันได้จัดทำสคริปต์ด้านล่างเพื่อจำลองสถานการณ์ …

1
จะขยายปริมาณออกในกล่อง SQL Server ได้อย่างไร
นี่คือคำถามสำหรับ sys เลือกที่นั่น (หรือผู้ที่เคยผ่านประสบการณ์นี้มาก่อน) บริษัท ของฉันต้องการจัดสรรพื้นที่ดิสก์เพิ่มเติมในกล่อง SQL Server ที่มีอยู่ในการผลิต เรากำลังสงสัยว่าการขยายไดรฟ์ข้อมูล ("ขยายระดับเสียง ... " ในการจัดการดิสก์) สามารถทำได้ออนไลน์หรือไม่หรือบริการ SQL Server นั้นจำเป็นต้องปิดตัวลงหรือไม่ เหตุผลใดที่บริการเซิร์ฟเวอร์ SQL ควรหยุดทำเช่นนี้หรือไม่ก็เป็นเพียงการดำเนินการนี้ในระหว่างวัน? ในกรณีที่รายละเอียดของระบบมีความเกี่ยวข้อง นี่คือกล่องจริง (ไม่มีการจำลองเสมือน) ที่ใช้ Windows 2012 R2 และ SQL Server 2008 R2 ขอบคุณ!

5
ข้อผิดพลาดของ SQL Server 8632 เนื่องจากมีรายการมากกว่า 100,000 รายการในส่วนคำสั่ง WHERE
ปัญหาของฉัน (หรืออย่างน้อยข้อความแสดงข้อผิดพลาด) คล้ายกันมากกับตัวประมวลผลแบบสอบถามที่ไม่มีทรัพยากรภายใน - แบบสอบถาม SQL ที่ยาวมากๆ ลูกค้าของฉันกำลังทำงานกับ SQL select-query ซึ่งมี where-clause พร้อมกับ 100,000 รายการ การค้นหาล้มเหลวด้วยข้อผิดพลาด 8632 และข้อความแสดงข้อผิดพลาด ข้อผิดพลาดภายใน: ถึงขีด จำกัด บริการนิพจน์แล้ว โปรดค้นหานิพจน์ที่ซับซ้อนที่อาจเกิดขึ้นในข้อความค้นหาของคุณและลองทำให้มันง่ายขึ้น) ฉันพบว่ามันแปลกมากที่ข้อความแสดงข้อผิดพลาดนี้ถูกส่งไปที่ 100,000 รายการดังนั้นฉันสงสัยว่านี่เป็นค่าที่กำหนดได้หรือไม่ นี่คือกรณีและในกรณีที่ใช่ฉันจะเพิ่มมูลค่านี้เป็นค่าที่สูงขึ้นได้อย่างไร ในMSDNมีข้อเสนอให้เขียนแบบสอบถามซ้ำ แต่ฉันต้องการหลีกเลี่ยงปัญหานี้ ในขณะเดียวกันฉันพบว่ารายการของสิ่งที่ฉันพูดถึงมีจำนวนธรรมชาติ แต่บางรายการก็เรียงตามลำดับ (เช่น (1,2,3,6,7,8,9,10,12, 13,15,16,17,18,19,20) สิ่งนี้ทำให้ SQL อยู่ตรงไหน - clause: where entry in (1,2,3,6,7,8,9,10,12,13,15,16,17,18,19,20) ฉันสามารถแปลงให้เป็น: where (entry between 1 and 3) …

3
การตัดคำค้นหาใน IF EXISTS ทำให้ช้ามาก
ฉันมีแบบสอบถามด้านล่าง: select databasename from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt' and not exists(select 1 from dbo.smalltable c where c.source=l.source) แบบสอบถามด้านบนเสร็จสมบูรณ์ในสามวินาที หากเคียวรีด้านบนคืนค่าใด ๆ เราต้องการให้โพรซีเดอร์ที่เก็บไว้เป็น EXIT ดังนั้นฉันจึงเขียนมันใหม่ด้านล่าง: If Exists( select databasename from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt' and not exists(select 1 from dbo.smalltable c where c.source=l.source) ) …

2
เป็นเรื่องถูกกฎหมายหรือไม่ที่ SQL Server เติมคอลัมน์ PERSISTED ด้วยข้อมูลที่ไม่ตรงกับคำจำกัดความ
ฉันกำลังติดตามคำถามนี้เกี่ยวกับค่าแปลก ๆ ในPERSISTEDคอลัมน์ที่คำนวณ คำตอบนั้นทำให้เดาไม่กี่เกี่ยวกับพฤติกรรมนี้ ฉันถามสิ่งต่อไปนี้: นี่ไม่ใช่ข้อผิดพลาดทันทีหรือไม่ จะPERSISTEDคอลัมน์ที่เคยได้รับอนุญาตให้ทำงานในลักษณะนี้หรือไม่? DECLARE @test TABLE ( Col1 INT, Contains2 AS CASE WHEN 2 IN (Col1) THEN 1 ELSE 0 END PERSISTED) --depends on Col1 INSERT INTO @test (Col1) VALUES (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)) SELECT …

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