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

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

1
SQL Server สร้างแผนใหม่ในแต่ละวัน
เรามีปัญหานี้ในสภาพแวดล้อมการผลิตของเรา Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) - รุ่นองค์กร (64 บิต) บน Windows NT 6.1 (รุ่น 7601: Service Pack 1) SQL Server กำลังวางแผนปฏิบัติการเกือบทั้งหมด (เกือบ 100%) และสร้างใหม่ทุกวันข้ามคืน (จาก 11:00 PM ถึง 8:00 AM) สิ่งนี้เกิดขึ้นเมื่อ 'สถิติการอัปเดตอัตโนมัติ' อยู่ในสถานะปิดใช้งาน เราได้เปิด 'สถิติการอัปเดตอัตโนมัติ' ในช่วง 2-3 สัปดาห์ที่ผ่านมา แต่มันก็ยังคงเกิดขึ้น เราไม่รู้จริง ๆ ว่าอะไรเป็นต้นเหตุของแผนยุคใหม่นี้ แต่เรามั่นใจว่าเราจะไม่ทำด้วยตนเอง สิ่งเดียวที่เกิดขึ้นจริงกับช่วงเวลาของแผนที่ถูกสร้างใหม่คืองานบำรุงรักษาฐานข้อมูลที่เรามี: ดัชนีรายวันปรับโครงสร้างองค์กรใหม่ …

7
ฉันจะสำรองข้อมูลของตารางเฉพาะใน SQL Server 2008 โดยใช้ T-SQL Script ได้อย่างไร
ฉันต้องการสำรองข้อมูลของตารางเฉพาะที่มีอยู่ในฐานข้อมูลของฉันใน.bakไฟล์และสิ่งเหล่านี้ควรทำโดยใช้สคริปต์ T-SQL

1
เราจำเป็นต้องจัดการธุรกรรมในรหัส C # หรือในขั้นตอนการจัดเก็บ
เราจำเป็นต้องมีการจัดการธุรกรรมใน c # หรือไม่รวมถึงการจัดเก็บฐานข้อมูลทั้งสองด้าน ค#: Using(transaction with transaction scope) { Execute stored proc; Transaction. Complete; } โพรซีเดอร์ที่เก็บ SQL: Create process As Begin try Begin transaction Commit End try Begin catch Rollback End catch

2
stats_column_id และ index_column_id ไม่อัพเดตด้วยลำดับฟิสิคัลของดัชนีคลัสเตอร์ที่มีการเปลี่ยนแปลง
ยกเว้นว่าฉันเข้าใจผิดวัตถุประสงค์ของคอลัมน์รหัสต่อไปนี้บ่งชี้ว่าการเปลี่ยนแปลงโครงสร้างของดัชนีคลัสเตอร์จะไม่เปลี่ยนตำแหน่งอันดับ ( stats_column_id) ของคอลัมน์ในsys.stats_columns DMV (ทดสอบใน AdventureWorks2014, AdventureWorks2008R2) select i.name, c.name, ic.column_id, ic.index_column_id from sys.indexes i join sys.index_columns ic on i.object_id = ic.object_id and i.index_id = ic.index_id join sys.columns c on i.object_id = c.object_id and ic.column_id = c.column_id where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID' order by ic.key_ordinal; select sh.name,s.name, c.name, c.column_id, sc.column_id, …

2
ทางเลือกอื่นในการบีบอัด NVARCHAR (MAX)?
ฉันกำลังพยายามบีบอัดตารางที่มีNVARCHAR(MAX)เขตข้อมูล น่าเสียดายที่rowการpageบีบอัดข้อมูลไม่มีผลกระทบต่อความปรารถนา (บันทึกเพียง ~ 100/200 MB สำหรับตาราง 20 GB) นอกจากนี้ฉันไม่สามารถใช้การบีบอัดที่เก็บคอลัมน์และที่เก็บคอลัมน์ได้เนื่องจากพวกเขาไม่สนับสนุนการบีบอัดNVARCHAR(MAX)ฟิลด์ มีใครบอกได้ไหมว่าฉันมีทางเลือกอื่น ๆ ที่นี่? ฉันเดาด้วยrowและการpageบีบอัดไม่มีผลเพราะเนื้อหาของNVARCHAR(MAX)คอลัมน์นั้นไม่เหมือนใคร

3
การสร้างเซิร์ฟเวอร์ที่เชื่อมโยงที่ชี้ไปที่ตัวเอง
ฉันพยายามสร้างเซิร์ฟเวอร์ที่เชื่อมโยงกับอินสแตนซ์ SQL Server 2014 servername\instancenameโดยใช้การเรียกต่อไปนี้: EXEC master.dbo.sp_addlinkedserver @server = N'servername\instancename', @srvproduct=N'SQL Server' ฉันได้รับข้อผิดพลาด: Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82 The server 'servername\instancename' already exists. นี้ทำงานได้ดีใน SQL Server 2005 และเป็นไปตามMSDN , เซิร์ฟเวอร์ที่เชื่อมโยงไม่จำเป็นต้องเป็นอินสแตนซ์อื่นของ SQL Server ดังนั้นฉันไม่แน่ใจว่ามีอะไรเปลี่ยนแปลงในเวอร์ชันล่าสุดที่ไม่อนุญาตสิ่งนี้ การใช้ UI สร้างข้อความที่คล้ายกัน: คุณไม่สามารถสร้างเซิร์ฟเวอร์ SQL ภายในเครื่องเป็นเซิร์ฟเวอร์ที่มีการเชื่อมโยง ฉันเข้าใจว่ามันเป็นเรื่องแปลกที่จะขอ แต่มันก็เพื่อสนับสนุนรหัสดั้งเดิมที่ทำงานในปี 2005 (และเคยเป็นกรณีที่แยกต่างหาก) เอกสารระบุว่าควรใช้งานได้ แต่ไม่สามารถทำได้ …

2
ตรรกะเบื้องหลัง ISNUMERIC สำหรับอักขระพิเศษบางตัวคืออะไร
ISNUMERICฟังก์ชั่นที่มีพฤติกรรมที่ไม่คาดคิด เอกสาร MSDN พูดว่า: ISNUMERICส่งคืน 1 เมื่อนิพจน์อินพุตประเมินเป็นชนิดข้อมูลตัวเลขที่ถูกต้อง มิฉะนั้นก็จะส่งกลับ 0. ที่ถูกต้องชนิดข้อมูลที่เป็นตัวเลขรวมต่อไปนี้: int, bigint, smallint, TINYINT, ทศนิยม, ตัวเลข, เงิน, smallmoney ลอยจริง และยังมีเชิงอรรถ: ISNUMERICส่งคืน 1 สำหรับอักขระบางตัวที่ไม่ใช่ตัวเลขเช่นเครื่องหมายบวก (+), ลบ (-) และสัญลักษณ์สกุลเงินที่ถูกต้องเช่นเครื่องหมายดอลลาร์ ($) สำหรับรายการที่สมบูรณ์ของสัญลักษณ์สกุลเงินดูเงินและ smallmoney (Transact SQL) เอาล่ะเพื่อให้+, -และสัญลักษณ์สกุลเงินจดทะเบียนที่คาดว่าจะได้รับการพิจารณาเป็นตัวเลข จนถึงตอนนี้ดีมาก ตอนนี้สำหรับส่วนที่แปลก ก่อนอื่นสัญลักษณ์สกุลเงินบางส่วนจากบทความที่เชื่อมโยงไม่ใช่ตัวเลขรวมไปถึง: เครื่องหมายยูโร - สกุลเงิน hex 20A0: ₠ สัญญาณ Naira, hex 20A6: ₦ Rial sign, …

2
วิธีการเลือกหลายคอลัมน์ แต่จัดกลุ่มตามกลุ่มเดียว?
ฉันมีปัญหาgroup byฉันต้องการเลือกหลายคอลัมน์ แต่จัดกลุ่มตามคอลัมน์เดียว แบบสอบถามด้านล่างเป็นสิ่งที่ฉันพยายาม แต่มันทำให้ฉันมีข้อผิดพลาด SELECT Rls.RoleName,Pro.[FirstName],Pro.[LastName],Count(UR.[RoleId]) as [Count] from [b.website-sitecore-core].[dbo].[aspnet_UsersInRoles] UR inner join [b.website-professional-au].[dbo].[Profile] Pro on UR.UserId = Pro.Id inner join [b.website-sitecore-core].[dbo].[aspnet_Roles] Rls on Rls.RoleId = UR.RoleId inner join [b.website-professional-au].[dbo].[Gender] Gn on gn.Id = pro.GenderId GROUP BY Rls.RoleName;

1
เหตุใดคุณจึงต้องใช้บัญชีบริการที่มีการจัดการแทนที่จะเป็นบัญชีเสมือนใน SQL Server 2012
ใน SQL Server 2012 บัญชีบริการจะถูกสร้างเป็นบัญชีเสมือน (VAs) ตามที่อธิบายไว้ที่นี่ตรงข้ามกับบัญชีบริการที่ได้รับการจัดการ (MSAs) ความแตกต่างที่สำคัญที่ฉันสามารถเห็นได้จากสิ่งเหล่านี้ตามคำอธิบาย: MSAs เป็นบัญชีโดเมน VAs เป็นบัญชีท้องถิ่น MSAs ใช้การจัดการรหัสผ่านอัตโนมัติที่จัดการโดย AD, VAs ไม่มีรหัสผ่าน ในบริบท Kerberos, MSAs ลงทะเบียน SPNs โดยอัตโนมัติ VAs ไม่ มีความแตกต่างอื่น ๆ อีกไหม? ถ้า Kerberos ไม่ได้ใช้งานทำไม DBA ถึงต้องการ MSA อัปเดต : ผู้ใช้รายอื่นได้ระบุถึงความขัดแย้งที่เป็นไปได้ในเอกสาร MS ที่เกี่ยวข้องกับ VAs : บัญชีเสมือนมีการจัดการโดยอัตโนมัติและบัญชีเสมือนสามารถเข้าถึงเครือข่ายในสภาพแวดล้อมของโดเมน กับ บัญชีเสมือนไม่สามารถรับรองความถูกต้องไปยังสถานที่ห่างไกล บัญชีเสมือนทั้งหมดใช้สิทธิ์ของบัญชีเครื่อง <domain_name>\<computer_name>$บทบัญญัติบัญชีเครื่องในรูปแบบ "บัญชีเครื่องจักร" คืออะไร? วิธีการ …

1
การเข้าร่วมช่วงใหม่ค้นหาดัชนีคอมโพสิตที่ไม่สามารถใช้ได้
สำหรับสคีมาและข้อมูลตัวอย่างต่อไปนี้ CREATE TABLE T ( A INT NULL, B INT NOT NULL IDENTITY, C CHAR(8000) NULL, UNIQUE CLUSTERED (A, B) ) INSERT INTO T (A) SELECT NULLIF(( ( ROW_NUMBER() OVER (ORDER BY @@SPID) - 1 ) / 1003 ), 0) FROM master..spt_values แอปพลิเคชันกำลังประมวลผลแถวจากตารางนี้ในลำดับดัชนีแบบกลุ่มเป็นกลุ่ม 1,000 แถว 1,000 แถวแรกจะถูกดึงออกมาจากแบบสอบถามต่อไปนี้ SELECT TOP 1000 …
14 sql-server  index 

1
เมื่อเปลี่ยนขนาดของคอลัมน์ nvarchar ฉันจำเป็นต้องทำดัชนีที่ไม่ซ้ำหรือไม่? และตารางจะถูกล็อคเมื่อสร้างดัชนีใหม่หรือไม่
ในฐานข้อมูลของเรามีตารางขนาดใหญ่ที่มีลักษณะคล้ายกันมากขึ้นหรือน้อยลง: CREATE TABLE dbo.production_data ( pd_id BIGINT PRIMARY KEY, serial NVARCHAR(16) NOT NULL UNIQUE, ... ); แต่ตอนนี้ขนาดของเขตข้อมูลอนุกรมกลายเป็นต่ำดังนั้นฉันต้องการเปลี่ยนเป็น 32 schema Visual Studio เปรียบเทียบเครื่องมือแนะนำการทำเช่นนี้โดย: DROP INDEX ux_production_data_serial ON dbo.production_data; GO ALTER TABLE dbo.production_data ALTER COLUMN serial NVARCHAR(32) NOT NULL; GO CREATE INDEX ux_production_data_serial ON dbo.production_data(serial ASC); มันจำเป็นจริงๆหรือ? หรือมากกว่านั้นเป็นวิธีที่ประหยัดมากในการทำเช่นนี้? เมื่อสร้างดัชนีที่ไม่ซ้ำอีกครั้งตารางของฉันจะถูกล็อคหรือไม่ เพราะนี่จะเป็นปัญหาใหญ่ (เนื่องจากตารางมี 30 …

1
ไม่ควรหลีกเลี่ยงใน
ในบรรดานักพัฒนา SQL Server บางคนเป็นความเชื่อที่ถือกันอย่างกว้างขวางว่าNOT INช้ามากและควรเขียนคำสั่งใหม่เพื่อให้ผลลัพธ์เหมือนเดิม แต่ไม่ใช้คำหลัก "ความชั่วร้าย" ( ตัวอย่าง ) มีความจริงใด ๆ หรือไม่? ตัวอย่างเช่นมีข้อบกพร่องบางอย่างที่รู้จักใน SQL Server (เวอร์ชันใด) ที่ทำให้การสืบค้นที่ใช้NOT INมีแผนการดำเนินการที่เลวร้ายยิ่งกว่าแบบสอบถามที่เทียบเท่าที่ใช้ LEFT JOINรวมกับNULLการตรวจสอบหรือ (SELECT COUNT(*) ...) = 0ในWHEREข้อ?

2
DBCC CHECKDB ความเสียหายที่ไม่สามารถแก้ไขได้: มุมมองที่จัดทำดัชนีมีแถวที่ไม่ได้สร้างขึ้นโดยการกำหนดมุมมอง
TL; DR: ฉันมีความเสียหายที่ไม่สามารถแก้ไขได้ในมุมมองที่จัดทำดัชนี นี่คือรายละเอียด: วิ่ง DBCC CHECKDB([DbName]) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS บนหนึ่งในฐานข้อมูลของฉันสร้างข้อผิดพลาดต่อไปนี้: เกี่ยวกับข่าวสาร 8907 ระดับ 16 สถานะ 1 บรรทัด 1 ดัชนีเชิงพื้นที่ดัชนี XML หรือมุมมองที่จัดทำดัชนี 'ViewName' (ID วัตถุ 784109934) ประกอบด้วยแถวที่ไม่ได้สร้างขึ้นโดยการกำหนดมุมมอง สิ่งนี้ไม่จำเป็นต้องแสดงถึงปัญหาด้านความสมบูรณ์ของข้อมูลในฐานข้อมูลนี้ ( ... ) CHECKDB พบข้อผิดพลาดในการจัดสรร 0 ข้อและข้อผิดพลาดความสอดคล้อง 1 ข้อในตาราง 'ViewName' repair_rebuild เป็นระดับการซ่อมแซมขั้นต่ำ (... ) ฉันเข้าใจว่าข้อความนี้บ่งชี้ว่าข้อมูลที่เป็นรูปธรรมของมุมมองที่จัดทำดัชนี 'ViewName' ไม่เหมือนกับสิ่งที่สร้างข้อความค้นหาต้นแบบ อย่างไรก็ตามการตรวจสอบข้อมูลด้วยตนเองไม่ได้ทำให้เกิดความคลาดเคลื่อน: SELECT * …

1
AlwaysOn AG, DTC พร้อม failover
ปัญหา:ฉันจะรัน Distributed Transaction Coordinator (DTC) บนเซิร์ฟเวอร์ทั้งหมดใน AlwaysOn Availability Group (AG) ได้อย่างไร ฉันไม่จำเป็นต้องรักษาการทำธุรกรรมมากกว่าเหตุการณ์ความล้มเหลว / การเปลี่ยนแปลง การติดตั้ง:ฉันมี Windows Failover Cluster (WSFC) ที่มีเซิร์ฟเวอร์ Windows 2008 R2 สามเครื่องซึ่งกำลังทำงาน SQL 2012 ทั้งหมดสองเซิร์ฟเวอร์อยู่ในศูนย์ข้อมูลเดียวและเป็นส่วนหนึ่งของ AlwaysOn Failover Cluster (FCI) ในขณะที่เซิร์ฟเวอร์ตัวที่สามอยู่ใน ศูนย์ข้อมูลที่สอง WSFC เป็นคลัสเตอร์หลายเครือข่ายย่อย นี่คือภาพร่างของการตั้งค่า: ฉันสามารถติดตั้งและกำหนดค่า DTC ให้ทำงานระหว่างสองโหนด FCI ได้เนื่องจากพวกเขาอยู่ในซับเน็ตเดียวกันและใช้ที่เก็บข้อมูลร่วมกัน ฉันกำหนดค่า AG สองสามตัวและพวกเขาทำงานได้ดี ภาพหน้าจอนี้แสดงการติดตั้ง DTC บน FCI: ภาพหน้าจอนี้แสดงให้เห็นว่าฉันสามารถกำหนดค่า DTC …

1
วิ่งรวมไปยังแถวก่อนหน้า
ฉันต้องการความช่วยเหลือเกี่ยวกับฟังก์ชั่นหน้าต่าง ฉันรู้ว่าคุณสามารถคำนวณผลรวมภายในหน้าต่างและผลรวมสะสมภายในหน้าต่าง แต่เป็นไปได้หรือไม่ที่จะคำนวณผลรวมการทำงานก่อนหน้าเช่นผลรวมการรันที่ไม่รวมแถวปัจจุบัน ฉันคิดว่าคุณจะต้องใช้ROWหรือRANGEโต้แย้ง ฉันรู้ว่ามีCURRENT ROWตัวเลือก แต่ฉันต้องการCURRENT ROW - 1ซึ่งเป็นไวยากรณ์ที่ไม่ถูกต้อง ความรู้ROWและRANGEข้อโต้แย้งของฉันมี จำกัด ดังนั้นความช่วยเหลือใด ๆ จะได้รับสุดซึ้ง ฉันรู้ว่ามีหลายโซลูชั่นในการแก้ไขปัญหานี้ แต่ฉันกำลังมองหาที่จะเข้าใจROW, RANGEข้อโต้แย้งและผมถือว่าปัญหาสามารถแตกกับสิ่งเหล่านี้ ฉันได้รวมวิธีที่เป็นไปได้หนึ่งวิธีไว้เพื่อคำนวณผลรวมการวิ่งก่อนหน้า แต่ฉันสงสัยว่ามีวิธีที่ดีกว่านี้หรือไม่: USE AdventureWorks2012 SELECT s.SalesOrderID , s.SalesOrderDetailID , s.OrderQty , SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID) AS RunningTotal , SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID ORDER BY SalesOrderDetailID) - s.OrderQty AS PreviousRunningTotal -- …

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