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

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

3
ข้อความแสดงข้อผิดพลาด - สิทธิ์การดูสถานะเซิร์ฟเวอร์ถูกปฏิเสธ - เมื่อเชื่อมต่อกับ SQL Server 2014 โดยใช้ SQL Server 2012 Management Studio
เมื่อคลิกขวาบนโต๊ะและเลือก "select top 1000 rows" ฉันได้รับข้อผิดพลาดนี้: มีวิธีแก้ปัญหาอื่นนอกเหนือจากการอัพเกรดเป็น SQL Server 2014 อย่างชัดเจนหรือไม่?

2
การแทนค่าภายในของ SQL Server UniqueIdentifier / GUID
เพื่อนร่วมงานของฉันส่งคำถามที่น่าสนใจมาให้ฉันซึ่งฉันไม่สามารถอธิบายได้ทั้งหมด เขารันโค้ดบางส่วน (รวมอยู่ด้านล่าง) และได้ผลลัพธ์ที่ไม่คาดคิดมาบ้าง เป็นหลักเมื่อแปลงUniqueIdentifier(ซึ่งฉันจะอ้างถึงGuidจากที่นี่จาก) เป็นประเภทbinary(หรือvarbinary) ลำดับของครึ่งแรกของผลลัพธ์จะย้อนกลับ แต่ครึ่งหลังไม่ใช่ ความคิดแรกของฉันคือการ endianness ของระบบเป็นสาเหตุและที่Guidแสดงถูกเก็บรักษาไว้ แต่binaryแบบฟอร์มไม่รับประกัน เห็นได้ชัดว่านี่เป็นรายละเอียดการใช้งาน แต่ฉันสงสัยว่ามีคำอธิบายที่ดีหรือไม่ รหัส: declare @guid uniqueidentifier = '8A737954-CBEC-40CE-A534-2AFFB5A0E207'; declare @binary binary(16) = (select convert(binary(16), @guid)); select @guid as [GUID], @binary as [Binary]; ผล: GUID Binary 8A737954-CBEC-40CE-A534-2AFFB5A0E207 0x5479738AECCBCE40A5342AFFB5A0E207 อย่างที่คุณเห็นครึ่งแรกของGuid(ตลอดทาง40CE) จะถูกเก็บไว้ด้านหลังสำหรับแต่ละส่วน นั่นคือส่วนแรกของGuidย้อนหลังจากนั้นส่วนที่สองจากนั้นส่วนที่สาม แต่ลำดับของส่วนจะถูกเก็บรักษาไว้ Guidหลังจากนั้นสองคนสุดท้ายส่วนจะถูกเก็บไว้ในลำดับที่แน่นอนที่พวกเขาปรากฏใน มีใครอธิบายเรื่องนี้ได้บ้าง (ชุดทดสอบที่มีขนาดใหญ่กว่านั้นรวมอยู่ด้านล่าง) รหัส: declare @guid_to_binary table …


1
กลยุทธ์การสืบค้นโดยใช้ตารางเวลาชั่วคราวของระบบ SQL Server 2016 สำหรับมิติที่เปลี่ยนแปลงช้า
เมื่อใช้ตารางชั่วคราวของระบบ (ใหม่ใน SQL Server 2016) การเขียนแบบสอบถามและความหมายของประสิทธิภาพเมื่อใช้คุณลักษณะนี้เพื่อจัดการมิติการเปลี่ยนแปลงอย่างช้า ๆ ในคลังข้อมูลเชิงสัมพันธ์ขนาดใหญ่ ตัวอย่างเช่นสมมติว่าฉันมีCustomerมิติ100,000 แถวพร้อมPostal Codeคอลัมน์และSalesตารางข้อเท็จจริงหลายพันล้านแถวพร้อมCustomerIDคอลัมน์คีย์ต่างประเทศ และสมมติว่าฉันต้องการสอบถาม "ยอดขายรวม 2014 ตามรหัสไปรษณีย์ของลูกค้า" DDL แบบง่ายเป็นเช่นนี้ (มีหลายคอลัมน์เพื่อความชัดเจน): CREATE TABLE Customer ( CustomerID int identity (1,1) NOT NULL PRIMARY KEY CLUSTERED, PostalCode varchar(50) NOT NULL, SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL, SysEndTime datetime2 GENERATED ALWAYS AS ROW …

1
ทำไมไม่สร้างดัชนีใหม่ด้วยจำนวนหน้า <1,000
ฉันใช้สคริปต์ Ola Hallengrens สำหรับการบำรุงรักษาดัชนี ก่อนที่ฉันจะทำอย่างนั้นฉันใช้แบบสอบถามต่อไปนี้เพื่อดูว่าดัชนีใดที่มีการแยกส่วนมากที่สุด: SELECT dbschemas.[name] as 'Schema', dbtables.[name] as 'Table', dbindexes.[name] as 'Index', indexstats.avg_fragmentation_in_percent, indexstats.page_count FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id] INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id] INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = …

3
ตรวจสอบความคืบหน้าของการแก้ไขการจัดระเบียบดัชนีใหม่ / สร้างใหม่
ฉันจะตรวจสอบความคืบหน้า / สถานะได้อย่างไรเมื่อฉันส่งการเปลี่ยนแปลงดัชนีการจัดระเบียบใหม่ / สร้างใหม่?

4
วิธีการตัดเครื่องหมายเน้นภาษาฮิบรู
ฉันต้องการเคล็ดลับการเข้ารหัส Char เพื่อเปลื้องเครื่องหมายสำเนียงภาษาฮิบรู ตัวอย่างก่อน בְּרֵאשִׁ֖יתבָּרָ֣אאֱלֹהִ֑יםאֵ֥תהַשָּׁמַ֖יִםוְאֵ֥תהָאָֽרֶץ ตัวอย่างหลังจาก בראשיתבראאלהיםאתהשמיםואתהארץ

8
เหตุผลในการหลีกเลี่ยงค่า ID ขนาดใหญ่
เรากำลังทำงานกับเว็บแอปพลิเคชันซึ่งผู้ใช้ยังไม่สามารถเข้าถึงได้ เจ้านายของฉันสังเกตเห็นว่าระเบียนที่สร้างขึ้นใหม่ได้รับ ID มากกว่า 10,000 รายการแม้ว่าเราจะมีระเบียนน้อยกว่า 100 รายการในตาราง เธอคิดว่าเว็บอินเตอร์เฟสด้วยเหตุผลบางอย่างสร้างเร็กคอร์ดชั่วคราวมากกว่า 100 เท่ามากกว่าเรคคอร์ดจริง (และลบทิ้ง) และสิ่งนี้สามารถนำเราให้วิ่งออกจากระยะภายในไม่กี่เดือนหลังจากปล่อย ฉันไม่คิดว่าเธอถูกต้องเกี่ยวกับสาเหตุของ ID อัตราเงินเฟ้อ (เพื่อนร่วมงานที่สามารถตอบคำถามนี้ในวันหยุดดังนั้นเราไม่ทราบแน่นอน) แต่สมมติว่าเธอเป็น เธอบอกว่าเธอเกลียดที่จะใช้คอลัมน์ bigint และเธอต้องการให้เราหยุดการสร้างคอลัมน์ ID โดยอัตโนมัติและเขียนรหัสฝั่งเซิร์ฟเวอร์ซึ่งเลือกจำนวนเต็ม "ไม่ได้ใช้" แรกและใช้เป็น ID ฉันเป็นนักเรียนที่จบการศึกษาด้านวิทยาศาสตร์คอมพิวเตอร์พร้อมประสบการณ์การใช้งานเพียงเล็กน้อยโดยเติมบทบาทนักพัฒนารุ่นเยาว์ เธอมีประสบการณ์หลายปีในการจัดการฐานข้อมูลทั้งหมดขององค์กรของเราและออกแบบส่วนใหญ่ ฉันคิดว่าว่าเธอไม่ถูกต้องในกรณีนี้รหัสประจำตัวที่ยิ่งใหญ่นั้นไม่มีอะไรต้องกลัว แต่ฉันยังไม่เชื่อคำตัดสินของฉัน อะไรคือข้อโต้แย้งสำหรับและต่อต้านแต่ละตำแหน่ง? มีอะไรที่ไม่ดีเกิดขึ้นได้ถ้าเราใช้ป้ายกำกับขนาดใหญ่และอะไรคืออันตรายของการคิดค้นฟังก์ชั่นการเติมล้ออัตโนมัติ? มีวิธีที่สามซึ่งดีกว่าอย่างใดอย่างหนึ่ง? เหตุผลของเธออาจเป็นเพราะต้องการหลีกเลี่ยงเงินเฟ้อของค่า ID ใบหน้า? ฉันสนใจที่จะฟังเกี่ยวกับเหตุผลในทางปฏิบัติด้วยเช่นกันบางทีรหัสประจำตัวขนาดใหญ่อาจใช้งานได้ในทางทฤษฎี แต่ก็ปวดหัวในทางปฏิบัติ แอปพลิเคชันไม่คาดว่าจะจัดการกับข้อมูลจำนวนมาก ฉันสงสัยว่ามันจะถึง 10,000 บันทึกจริงภายในไม่กี่ปีถัดไป หากมันสร้างความแตกต่างเรากำลังใช้เซิร์ฟเวอร์ Microsoft SQL แอปพลิเคชั่นเขียนด้วยภาษา C # และใช้ Linq …

2
จำนวนนิพจน์ค่าแถวในคำสั่ง INSERT มีค่าเกินจำนวนสูงสุดที่อนุญาตของค่าแถว 1,000 ค่า
หนึ่งในINSERT INTOสคริปต์ถูกเขียนดังนี้ INSERT INTO tableName (Column1, Column2,....) VALUES (value1, Value2,...), (value1, Value2,...),.... ต่อไปนี้เป็นข้อผิดพลาดที่เรากำลังเผชิญกับการแยกวิเคราะห์คำสั่งแทรกด้านบน ข่าวสารเกี่ยวกับ 10738, ระดับ 15, สถานะ 1, บรรทัด 1007 จำนวนนิพจน์ค่าของแถวในคำสั่ง INSERT เกินจำนวนสูงสุดที่อนุญาตของค่าแถว 1,000 ค่า คำถามง่ายๆของฉันคือว่าเราสามารถเปลี่ยนวงเงินได้ 1,000 ค่าหรือไม่

2
ลดขนาดบันทึกธุรกรรมขณะใช้กลุ่มความพร้อมใช้งาน AlwaysOn
เรากำลังใช้AlwaysOn Availability Groupคุณสมบัติของ SQL Server 2012 สำรองฐานข้อมูลเต็มรูปแบบปกติและสำรองข้อมูลบันทึกธุรกรรมจะทำทุกวันในฐานข้อมูลรอง ฉันได้อ่านที่นี่ในการทำสำรองข้อมูลบันทึกธุรกรรมบนทั้งเรพลิกาหลักหรือเรพพลิเคชั่นสำรองจะทำเครื่องหมายบันทึกธุรกรรมของเรพพลิกาทั้งสองว่าสามารถใช้ซ้ำได้ อย่างไรก็ตามขนาดการสำรองข้อมูลบันทึกธุรกรรมมีขนาดใหญ่และสามารถลดลงได้โดยใช้ไฟล์ย่อขนาด: ฉันกู้คืนฐานข้อมูลในเครื่องแล้วทำการดำเนินการย่อขนาด ขนาดของไฟล์บันทึกลดลงเหลือ 160 MB คำถามของฉันอยู่ที่ฐานข้อมูลใดที่ฉันควรทำการลดขนาดไฟล์ล็อกธุรกรรม (หลักรองหรือทั้งสองอย่าง)? ฉันเดาว่าในอดีตเป็นเวลาหลายปีที่ไม่มีไฟล์แบ็คอัพสำรองดังนั้นมันจึงใหญ่มาก การดำเนินการDBCC SQLPERF (LOGSPACE)ฉันจะเห็นว่ามี0.06%การใช้ไฟล์เท่านั้น - ไม่มีจุดใดที่ฉันจะเก็บไฟล์บันทึกขนาดใหญ่เช่นนี้ได้ ใน[sys].[database_files]ฉันจะตรวจสอบว่าmax_sizeมีการตั้งค่า-1กับgrowthการ65536ดังนั้นฉันเดาเมื่อมันต้องมีพื้นที่ว่างมากขึ้นก็จะได้รับ อย่างไรก็ตามฉันสามารถลดขนาดมันเป็น 5% เพื่อป้องกันการเติบโตในอนาคต ฉันกำลังพยายามหาคำยืนยันว่าฉันไม่คิดที่จะทำเช่นนั้น อันที่จริงแล้วการแบ็คอัพ (ในฐานข้อมูลและไฟล์บันทึก) จะดำเนินการเฉพาะในฐานข้อมูลรองดังนั้นมันจะง่ายกว่าที่จะทำการลดขนาดไฟล์ลง แต่ขนาดล็อกไฟล์หลักจะลดลงเช่นกัน?

2
ฉันจะบอกได้ว่ามีการใช้งาน Cores SQL Server จำนวนเท่าใด
ฉันมีเซิร์ฟเวอร์สองเครื่องที่ใช้ SQL Server เซิร์ฟเวอร์ 1: SQL Server 2008 R2 Express (4 คอร์) เซิร์ฟเวอร์ 2: SQL Server 2012 Developer Edition (8 คอร์) เท่าที่ฉันทราบ SQL Server 2008 R2 Express ควรใช้หนึ่งคอร์เท่านั้น รุ่นนักพัฒนาของ SQL Server 2012 ควรใช้ 8 คอร์ทั้งหมด อย่างไรก็ตามถ้าฉันเรียกใช้คำสั่งต่อไปนี้ภายในแบบสอบถาม SQL บน SQL Server 2008 R2 Express มันแสดง 4 คอร์ select scheduler_id, cpu_id, status, …

2
การแปลง VARCHAR เป็น VARBINARY
ฉันได้เก็บบันทึกข้อความค้นหาที่ใช้งานราคาแพงพร้อมกับแผนแบบสอบถามไว้ในตารางเพื่อให้เราสามารถตรวจสอบแนวโน้มด้านประสิทธิภาพและระบุพื้นที่ที่ต้องการเพิ่มประสิทธิภาพ อย่างไรก็ตามมาถึงจุดที่แผนการสืบค้นใช้พื้นที่มากเกินไป (เนื่องจากเราจัดเก็บทั้งแผนกับแต่ละแบบสอบถาม) ฉันจึงพยายามทำให้ข้อมูลที่มีอยู่เป็นปกติด้วยการแยก QueryPlanHash และ QueryPlan ไปยังตารางอื่น CREATE TABLE QueryPlans ( QueryPlanHash VARBINARY(25), QueryPlan XML, CONSTRAINT PK_QueryPlans PRIMARY KEY ( QueryPlanHash ) ); เนื่องจากคำจำกัดความของquery_plan_hashin sys.dm_exec_query_statsเป็นเขตข้อมูลไบนารี (และฉันจะแทรกข้อมูลใหม่เป็นประจำ) ฉันจึงใช้VARBINARYกับชนิดข้อมูลในตารางใหม่ของฉัน อย่างไรก็ตามการแทรกด้านล่างล้มเหลว ... INSERT INTO QueryPlans ( QueryPlanHash, QueryPlan ) SELECT queryplanhash, queryplan FROM ( SELECT p.value('(./@QueryPlanHash)[1]', 'varchar(20)') queryplanhash, QueryPlan, ROW_NUMBER() OVER (PARTITION …

5
ทำไมฉันไม่สามารถใช้คำสั่ง CASE เพื่อดูว่ามีคอลัมน์อยู่หรือไม่และไม่ได้เลือกคอลัมน์
ทำไมบางอย่างเช่นนี้จึงไม่ทำงาน SELECT CASE WHEN NULLIF(COL_LENGTH('Customers', 'Somecol'), '') IS NULL THEN NULL ELSE Somecol END AS MyTest FROM Customers; ฉันแค่ตรวจสอบว่ามีคอลัมน์อยู่อย่างไรก็ตาม SQL Server บ่นว่าSomecolไม่มีอยู่ มีทางเลือกอื่นสำหรับสิ่งนี้ในข้อความเดี่ยว?
17 sql-server  t-sql 

5
วิธีหาช่องว่างซ้ำ ๆ เมื่อ 90 วันที่ผ่านไประหว่างแถว
นี่เป็นงานที่ไม่สำคัญใน C # โฮมเวิร์ลดของฉัน แต่ฉันยังไม่ได้ทำใน SQL และต้องการที่จะแก้ปัญหาการตั้งค่า (โดยไม่มีเคอร์เซอร์) ชุดผลลัพธ์ควรมาจากข้อความค้นหาเช่นนี้ SELECT SomeId, MyDate, dbo.udfLastHitRecursive(param1, param2, MyDate) as 'Qualifying' FROM T มันควรจะทำงานอย่างไร ฉันส่ง params ทั้งสามนี้ไปยัง UDF UDF ใช้ params ภายในเพื่อดึงข้อมูลแถว &lt;= 90 วันที่เก่ากว่าที่เกี่ยวข้องจากมุมมอง UDF สำรวจ 'MyDate' และส่งคืน 1 ถ้าควรรวมอยู่ในการคำนวณทั้งหมด หากไม่ควรส่งคืนค่า 0 จะถูกตั้งชื่อเป็น "คุณสมบัติ" สิ่งที่ udf จะทำ แสดงรายการแถวตามลำดับวันที่ คำนวณวันระหว่างแถว แถวแรกในชุดผลลัพธ์เป็น Hit = 1 …

5
ย้ายหลายฐานข้อมูลจาก C: เป็น D: ในครั้งเดียว
ฉันมี SQL Server 2008 R2 โดยมีฐานข้อมูล 323 แห่งกินไดรฟ์ C: ไดรฟ์ SSD ที่รวดเร็วถึง 14 GB เนื่องจากฉันต้องการเรียกคืนพื้นที่บางส่วนบนไดรฟ์ C: ฉันต้องการย้ายพวกเขาไปยังไดรฟ์ D: ของฉัน ฉันพบบทความ MSDN นี้แล้ว แต่ดูเหมือนว่าเป็นขั้นตอนการย้ายฐานข้อมูลเดียวเท่านั้น มีวิธีอัตโนมัติหรือสคริปต์เพื่อย้ายฐานข้อมูลทั้งหมดของฉันในครั้งเดียว?

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