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

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

4
จะลบตัวแบ่งบรรทัดใน SSMS ได้อย่างไร
ฉันจัดการกับ SQL ที่มีลักษณะดังนี้ create procedure as begin สังเกตเห็นช่องว่างขนาดใหญ่เช่นระหว่างและasbegin ฉันจะลบสิ่งเหล่านี้ได้อย่างไร ฉันใช้ตัวจัดรูปแบบ SQL แต่ไม่ทำงาน
22 sql-server  ssms 

2
วิธีที่ดีที่สุดในการโยกย้ายฐานข้อมูล SQL Server ขนาดใหญ่ที่มีการหยุดทำงานต่ำผ่านเครือข่าย
นิยามปัญหา เซิร์ฟเวอร์ฐานข้อมูลของเราต้องถูกถ่ายโอนไปยังดาต้าเซ็นเตอร์อื่น มันรันบน Microsoft SQL Server 2012 Enterprise (64 บิต) และมีฐานข้อมูลสองแห่งประมาณ 2TB และ 1TB การหยุดทำงานเพียงเล็กน้อยหรือไม่มีเลยก็เหมาะ จำนวนงาน ฐานข้อมูลเหล่านั้นใช้สำหรับเว็บไซต์. NET และมีการอัพเดทอยู่ตลอดเวลา แม้ว่าจะไม่สามารถใช้ได้ในช่วงสุดสัปดาห์ก็จะเป็นที่ยอมรับ ฐานข้อมูลที่ใช้อยู่ในปัจจุบันจะยังคงเป็นฐานข้อมูลเดียวที่ใช้งานอยู่จนกว่าสวิตช์จะเปลี่ยนเป็นสวิตช์ใหม่ สวิตช์นั้นจะสามารถทำได้โดยเพียงแค่เปลี่ยนรายการ DNS ให้ชี้ไปที่เซิร์ฟเวอร์ฐานข้อมูลใหม่ในขณะที่ตรวจสอบให้แน่ใจว่าไม่ได้มีการปรับปรุงฐานข้อมูล นอกจากนี้เวลาที่ใช้ในการดำเนินการนี้ไม่สำคัญตราบใดที่สวิตช์จากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น (หยุดทำงาน) ยังคงอยู่ในระดับต่ำ แนวทางการพิจารณา สำรองและเรียกคืน สิ่งนี้ทำมาแล้วในอดีต แต่เกี่ยวข้องกับการหยุดทำงานที่สูงแม้ว่ามันจะทำผ่านเครือข่ายภายใน แต่ก็มีประสิทธิภาพมากกว่าผ่านทางอินเทอร์เน็ต บันทึกการจัดส่ง เท่าที่ฉันเข้าใจวิธีการนี้จะลดเวลาหยุดทำงานโดยกำหนดค่า master / slave และถ่ายโอนสำเนาของ master DB ที่แน่นอนไปยังทาสที่ถูกอ่านเท่านั้น ดังที่ได้กล่าวมาแล้วการเข้าถึงทาสนั้นไม่จำเป็นและเราก็ต้องการวิธีที่จะมีการจำลองฐานข้อมูลหลักโดยไม่มีข้อมูลเสียหาย ดูเหมือนว่าจะค่อนข้างมีประสิทธิภาพในแง่ของการใช้ทรัพยากรและจะไม่ส่งผลกระทบต่อประสิทธิภาพของต้นแบบมากนัก ฉันอาจผิดเกี่ยวกับวิธีการนี้ดังนั้นโปรดแก้ไขฉัน การทำมิเรอร์ฐานข้อมูล ฉันไม่ได้ตระหนักถึงวิธีการดังกล่าว แต่ดูเหมือนว่าเป็นตัวเลือกที่ถูกต้อง ไม่จำเป็นต้องมีการซิงค์แบบเรียลไทม์และประสิทธิภาพของต้นแบบค่อนข้างสำคัญดังนั้นอะซิงโครนัสจะเป็นหนทางไปถ้าเลือกวิธีนี้ ตัวเลือกอื่น? เซิร์ฟเวอร์นั้นทำงานโดยตรงบนฮาร์ดแวร์โลหะเปลือยดังนั้นโซลูชันระดับล่างจึงไม่ใช่ตัวเลือก …

2
เป็นไปได้หรือไม่ที่จะบังคับให้เครื่องมือเพิ่มประสิทธิภาพกำจัดตารางที่ไม่เกี่ยวข้องในมุมมองที่แบ่งพาร์ติชันนี้
ฉันกำลังทดสอบสถาปัตยกรรมที่แตกต่างกันสำหรับตารางขนาดใหญ่และข้อเสนอแนะอย่างหนึ่งที่ฉันเห็นคือใช้มุมมองที่แบ่งพาร์ติชันโดยที่ตารางขนาดใหญ่จะแบ่งออกเป็นชุดที่มีขนาดเล็กลง 1 , 2 , 3 , 4 ในการทดสอบวิธีการนี้ฉันได้ค้นพบบางสิ่งที่ไม่สมเหตุสมผลสำหรับฉัน เมื่อฉันกรอง "การแบ่งคอลัมน์" ในมุมมองข้อเท็จจริงเครื่องมือเพิ่มประสิทธิภาพจะค้นหาเฉพาะในตารางที่เกี่ยวข้องเท่านั้น นอกจากนี้หากฉันกรองคอลัมน์นั้นบนตารางมิติเครื่องมือเพิ่มประสิทธิภาพจะกำจัดตารางที่ไม่จำเป็น อย่างไรก็ตามถ้าฉันกรองส่วนอื่น ๆ ของมิติตัวเพิ่มประสิทธิภาพจะค้นหา PK / CI ของแต่ละตารางพื้นฐาน นี่คือคำถามที่ถาม: select od.[Year], AvgValue = avg(ObservationValue) from dbo.v_Observation o join dbo.ObservationDates od on o.ObservationDateKey = od.DateKey where o.ObservationDateKey >= 20000101 and o.ObservationDateKey <= 20051231 group by od.[Year]; select od.[Year], AvgValue …

1
แทรกด้วย OUTPUT ที่สัมพันธ์กับตารางคิวรีย่อย
ฉันกำลังแก้ไขโครงสร้างของฐานข้อมูล เนื้อหาหลายคอลัมน์ของตารางสถาบันการเงินจะต้องมีการโอนเข้ามาในตารางบุคคล FinancialInstitution เชื่อมโยงกับบุคคลที่มีคีย์ต่างประเทศ FinancialInstitution แต่ละรายการต้องการรหัสของบุคคลที่เกี่ยวข้อง ดังนั้นสำหรับแต่ละบรรทัดใหม่ที่แทรกใน Person ID ของบรรทัดใหม่นี้ (IDENTITY) จะต้องถูกคัดลอกกลับไปยังบรรทัดที่เกี่ยวข้องของ FinancialInstit วิธีที่ชัดเจนในการทำเช่นนี้คือรหัส T-SQL ซ้ำ ๆ แต่ฉันสนใจที่จะรู้ว่ามันเป็นไปได้ที่จะทำเฉพาะกับการดำเนินการตามชุด ฉันจินตนาการถึงระดับภายในของคำขอดังกล่าวจะเป็นเช่น: INSERT INTO Person (Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1) OUTPUT inserted.Id, FinancialInstitution.Id SELECT Id, Street, Number, City, [State], PostCode, CountryId, PhoneNumber, Fax, Email FROM FinancialInstitution; น่าเสียดายที่ดูเหมือนว่า OUTPUT จะไม่สามารถมีความสัมพันธ์แบบนั้น …

2
วิธีเก็บประวัติของ SQL Server ที่จัดเก็บการแก้ไขขั้นตอน
หมายเหตุ: ฉันไม่ได้ถามเกี่ยวกับการควบคุมเวอร์ชันเต็ม มีวิธีใดโดยอัตโนมัติในการเก็บประวัติของกระบวนงานที่เก็บไว้ใน SQL Server คล้ายกับวิธีที่ Google เอกสารเก็บประวัติเวอร์ชันของเอกสารโดยอัตโนมัติและ Wikipedia เก็บประวัติเวอร์ชันของบทความโดยอัตโนมัติ ฉันไม่ต้องการให้ผู้ใช้อัปเดตกระบวนงานที่เก็บไว้เพื่อรักษาพื้นที่เก็บข้อมูลของขั้นตอนการจัดเก็บไว้ด้วย นี่เป็นงานมากเกินไปและผู้คนจะไม่ทำ หวังว่านี่คือสิ่งที่ฉันสามารถเปิดใน SQL Server ... (และโดยขั้นตอนการจัดเก็บจริงๆฉันหมายถึงฟังก์ชั่นทริกเกอร์ ฯลฯ โดยทั่วไปทุกอย่างภายใต้ความสามารถในการโปรแกรม) ฉันโพสต์ไปที่/programming/14522224/how-to-keep-history-of-sql-server-stored-procedure-revisionsก่อนเพราะฉันสงสัยว่ามันจะได้รับมุมมองเพิ่มเติมที่นั่น

4
มีวิธีสร้างตารางสร้างสคริปต์ใน TSQL หรือไม่?
มีวิธีสร้างสคริปต์สร้างจากตารางที่มีอยู่ใน T-SQL (โดยไม่ใช้ SMO เนื่องจาก T-SQL ไม่สามารถเข้าถึง SMO ได้) สมมติว่าเป็นกระบวนงานที่เก็บไว้ที่รับชื่อตารางและส่งคืนสตริงที่มีสคริปต์สร้างสำหรับตารางที่กำหนดหรือไม่ ตอนนี้ให้ฉันอธิบายสถานการณ์ที่ฉันกำลังเผชิญเนื่องจากอาจมีวิธีอื่นในการเข้าถึงสิ่งนี้ ฉันมีอินสแตนซ์ที่มีฐานข้อมูลหลายโหล ฐานข้อมูลเหล่านี้ทั้งหมดมีสคีมาเหมือนกันทั้งหมดตารางเดียวกันดัชนีและอื่น ๆ พวกเขาถูกสร้างขึ้นเป็นส่วนหนึ่งของการติดตั้งซอฟต์แวร์บุคคลที่สาม ฉันต้องมีวิธีในการทำงานกับพวกเขาเพื่อให้ฉันสามารถรวบรวมข้อมูลจากพวกเขาในลักษณะเฉพาะกิจ ผู้คนที่ดีที่ dba.se ได้ช่วยฉันที่นี่แล้วจะสร้างทริกเกอร์ในฐานข้อมูลอื่นได้อย่างไร ขณะนี้ฉันต้องการค้นหาวิธีการเลือกจากตารางในฐานข้อมูลทั้งหมด ฉันได้บันทึกชื่อฐานข้อมูลทั้งหมดลงในตารางที่เรียกDatabaseesและฉันเขียนสคริปต์ต่อไปนี้เพื่อดำเนินการคำสั่งที่เลือกในพวกเขาทั้งหมด: IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp select * into #tmp from Database1.dbo.Table1 where 1=0 DECLARE @statement nvarchar(max) = N'insert into #tmp select * from Table1 where Column1=0 …

3
จะมีความสัมพันธ์แบบตัวต่อตัวกับเด็กที่มีสิทธิพิเศษอย่างไร
ฉันต้องการที่จะมีความสัมพันธ์แบบหนึ่งต่อหลายคนซึ่งสำหรับผู้ปกครองแต่ละคนเด็กหนึ่งหรือศูนย์ถูกทำเครื่องหมายเป็น "รายการโปรด" อย่างไรก็ตามผู้ปกครองทุกคนจะไม่มีลูก (นึกถึงผู้ปกครองว่าเป็นคำถามในไซต์นี้เด็ก ๆ เป็นคำตอบและชอบเป็นคำตอบที่ยอมรับ) ตัวอย่างเช่น TableA Id INT PRIMARY KEY TableB Id INT PRIMARY KEY Parent INT NOT NULL FOREIGN KEY REFERENCES TableA.Id วิธีที่ฉันเห็นฉันสามารถเพิ่มคอลัมน์ต่อไปนี้ใน TableA: FavoriteChild INT NULL FOREIGN KEY REFERENCES TableB.Id หรือคอลัมน์ต่อไปนี้เพื่อ TableB: IsFavorite BIT NOT NULL ปัญหาเกี่ยวกับวิธีแรกคือมันแนะนำคีย์ต่างประเทศที่ไม่มีค่าซึ่งฉันเข้าใจว่าไม่ได้อยู่ในรูปแบบปกติ ปัญหาเกี่ยวกับแนวทางที่สองคือต้องทำงานมากกว่านี้เพื่อให้แน่ใจว่าเด็กส่วนใหญ่จะเป็นคนโปรด เกณฑ์ประเภทใดที่ฉันควรใช้เพื่อกำหนดวิธีการที่จะใช้ หรือมีวิธีอื่นที่ฉันไม่ได้พิจารณาหรือไม่? ฉันใช้ SQL Server 2012

1
ทำไม SQL Server 2012 Express ใช้ RAM 9.5GB บนเซิร์ฟเวอร์ของฉัน
ฉันกำลังสร้างแอปพลิเคชันที่ฉันวางแผนจะฝัง SQL Server 2012 Express เป็นที่เก็บข้อมูลหลัก เมื่อทำการทดสอบบนเครื่องพัฒนาของฉัน (Win7-32 ​​ที่มี RAM 3GB) ฉันไม่เคยสังเกตว่าsqlservr.exeกระบวนการใช้ RAM มากกว่า 1GB อย่างที่ฉันคาดไว้จากการจำกัด ขนาดของฮาร์ดแวร์ที่เผยแพร่สำหรับ SQL Server รุ่น Express จากนั้นฉันย้ายแอปพลิเคชันของฉันไปยังเครื่องระดับเซิร์ฟเวอร์ (Win Server 2008R2 64- บิตพร้อม RAM 16GB) เพื่อประเมินประสิทธิภาพการทำงานที่นั่นและรู้สึกประหลาดใจที่พบว่าsqlservr.exeกระบวนการขยายอย่างรวดเร็วไปเป็นแรม 9.5GB และอยู่ที่นั่น ฉันรีสตาร์ทสองสามครั้งเพื่อดูว่าจะมีผลกระทบใด ๆ หรือไม่ แต่ในแต่ละครั้งกระบวนการจะกลับไปที่ ~ 9.5GB อย่างรวดเร็ว ตอนนี้ฉันรู้สึกยินดีอย่างยิ่งที่มี SQL Server Express ใช้ RAM ของฉัน แต่ฉันอยากจะรู้ว่านี่เป็นพฤติกรรมที่คาดหวังหรือไม่ดังนั้นฉันจึงไม่ต้องพึ่งพาระดับประสิทธิภาพที่ขึ้นอยู่กับการใช้ RAM ที่ไม่ถูกต้อง FYI …

1
แบบสอบถาม SQL สำหรับชุดค่าผสมโดยไม่ต้องทำซ้ำ
ฉันต้องการแบบสอบถามที่สามารถใช้ใน (หรือตาม) ฟังก์ชั่นและดึงการรวมกันของค่า n ทั้งหมด และฉันต้องการความยาวทั้งหมด k โดยที่ k = 1..n ตัวอย่างอินพุตเพิ่มเติมและผลลัพธ์ดังนั้นอินพุตมี 3 ค่าแทน 2 อย่างไรก็ตามจำนวนค่าอินพุตอาจแตกต่างจาก 1 ถึง n ตัวอย่าง: อินพุต: ตารางที่มีค่าในหนึ่งคอลัมน์ในหลายแถว Value (nvarchar(500)) ------ Ann John Mark เอาท์พุท # 1: ตารางที่มีค่าต่อกันในหนึ่งคอลัมน์ Ann John Mark Ann,John John,Mark Ann,Mark Ann,John,Mark

4
รวมคำสั่ง deadlocking ตัวเอง
ฉันมีขั้นตอนดังต่อไปนี้ (SQL Server 2008 R2): create procedure usp_SaveCompanyUserData @companyId bigint, @userId bigint, @dataTable tt_CoUserdata readonly as begin set nocount, xact_abort on; merge CompanyUser with (holdlock) as r using ( select @companyId as CompanyId, @userId as UserId, MyKey, MyValue from @dataTable) as newData on r.CompanyId = newData.CompanyId and r.UserId = newData.UserId …

2
ความแตกต่างของประสิทธิภาพระหว่างดัชนีแบบคลัสเตอร์และแบบไม่ทำดัชนี
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ผมอ่านและClusteredNon Clustered Indexes Clustered Index- มันมีหน้าข้อมูล นั่นหมายถึงข้อมูลแถวที่สมบูรณ์จะแสดงในคอลัมน์ดัชนีแบบกลุ่ม Non Clustered Index- มีเฉพาะข้อมูลตัวระบุแถวในรูปแบบของคอลัมน์ดัชนีแบบคลัสเตอร์ (ถ้าไม่มีข้อมูล) หรือตัวระบุไฟล์ + หมายเลขหน้า + จำนวนแถวทั้งหมดในหน้า ซึ่งหมายความว่าเคียวรีเครื่องมือต้องใช้ขั้นตอนเพิ่มเติมเพื่อค้นหาข้อมูลจริง ข้อความค้นหา - ฉันจะตรวจสอบความแตกต่างด้านประสิทธิภาพด้วยความช่วยเหลือของตัวอย่างที่ใช้งานจริงได้อย่างไรเนื่องจากเรารู้ว่าตารางสามารถมีได้เพียงรายการเดียวClustered Indexและจัดเตรียมsortingที่Clustered Index ColumnและNon Clustered Indexไม่ได้ให้บริการsortingและสามารถรองรับ 999 Non Clustered IndexesในSQL Server 2008และ 249 นิ้วSQL Server 2005ได้

2
สิ่งใดที่ทำให้เซสชันการมิเรอร์หมดเวลาจึงเกิดความล้มเหลว
เรามีเซิร์ฟเวอร์การผลิต SQL สองเครื่องที่รัน SQL Server 2005 SP4 พร้อมการอัพเดท 3 เซิร์ฟเวอร์ทั้งสองทำงานบนเครื่องจริงที่เหมือนกัน DELL PowerEdge R815 พร้อมซีพียู 4 x 12 คอร์และ 512GB (ใช่ GB) ของ ram พร้อมไดรฟ์ที่เชื่อมต่อ iSCSI SAN ขนาด 10GB สำหรับฐานข้อมูลและบันทึก SQL ทั้งหมด ระบบปฏิบัติการเป็น Microsoft Windows Server 2008 R2 Enterprise ที่มีการอัพเดท SP และ windows ทั้งหมด ไดรฟ์ระบบปฏิบัติการคืออาร์เรย์ RAID 5 ของไดรฟ์ 3 x 72GB …

3
วิธีที่ไม่เจ็บปวดในการสร้างดัชนีคลัสเตอร์บนโต๊ะขนาดใหญ่หรือไม่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ดังนั้นเราจึงมีเว็บไซต์ลูกค้าที่ร้องเรียนเกี่ยวกับประสิทธิภาพที่ช้ามาก ฉันลองดูหนึ่งครั้งและเห็นได้ชัดว่าปัญหานี้เกิดขึ้นเนื่องจากSomebody Else (grrrr) ออกแบบตารางที่มีระเบียนมากกว่า 20 ล้านรายการโดยไม่มีดัชนีคลัสเตอร์ ตอนนี้ฉันต้องการสร้างดัชนีคลัสเตอร์บนตารางนั้น - แต่ในสภาพแวดล้อมการทดสอบของฉันcreate indexคำสั่งของฉันทำงานเป็นเวลาหนึ่งชั่วโมงและยังไม่เสร็จ ไซต์ลูกค้าเป็นร้านค้าที่ใช้งานได้ตลอด 24 ชั่วโมงทุกวันและไม่สามารถเสียเวลาลงได้หนึ่งชั่วโมงในขณะที่ฉันสร้างดัชนี มีวิธีการบังคับใช้เดรัจฉานน้อยกว่าในการสร้างดัชนีที่จะทำให้งานเสร็จอย่างรวดเร็วหรือทำด้วยวิธีที่ชาญฉลาดซึ่งจะไม่ทำลายประสิทธิภาพของเซิร์ฟเวอร์โดยสิ้นเชิงในขณะที่กำลังทำงานอยู่หรือไม่? เรากำลังใช้ SQL Server Enterprise Edition

4
จำกัด ผลลัพธ์ให้อยู่ในแถวที่ 2 อันดับแรก
ใน SQL Server 2008 ฉันใช้เพื่อกลับชุดข้อมูลที่มีRANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC) RANKแต่ฉันมีหลายร้อยเร็กคอร์ดสำหรับแต่ละพาร์ติชันดังนั้นฉันจะได้รับค่าจากอันดับ 1, 2, 3 ...... 999 แต่ฉันต้องการได้มากถึง 2 RANKsในแต่ละPARTITIONครั้ง ตัวอย่าง: ID Name Score Subject 1 Joe 100 Math 2 Jim 99 Math 3 Tim 98 Math 4 Joe 99 History 5 Jim 100 History 6 Tim 89 …

5
เหตุใดจึงต้องเริ่มต้นใหม่เป็นระยะ ๆ เพื่อให้อินสแตนซ์ของฉันทำงานได้ดี
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา เรามีเซิร์ฟเวอร์ฐานข้อมูลการผลิตใน SQL 2005 ทุกอย่างทำงานได้ตามปกติ แต่หลังจากผ่านไปสองสัปดาห์เราจะเห็นว่าประสิทธิภาพการทำงานลดลง การรีสตาร์ท SQL Server จะทำให้ประสิทธิภาพกลับสู่ปกติ พื้นหลังบางส่วน: ใช้งานฐานข้อมูลมากกว่า 1,200 ฐานข้อมูล (ส่วนใหญ่เป็นผู้เช่ารายเดียวและมีหลายผู้เช่า) ก่อนที่ใครจะบรรยายเกี่ยวกับการย้ายไปยังผู้เช่าหลายคนเท่านั้นมีเหตุผลที่ถูกต้องในการรักษาโครงสร้างนี้ ...... RAM คือ 16 GB หลังจากรีสตาร์ทจะใช้เวลาไม่นานสำหรับ SQL Server ที่จะกลับไปใช้งานขนาด 15 GB การเชื่อมต่อฐานข้อมูล Active มีประมาณ 80 การเชื่อมต่อซึ่งเรารู้สึกว่าค่อนข้างดีเนื่องจากมีพูลการเชื่อมต่อหนึ่งต่อเว็บเซิร์ฟเวอร์ต่อกระบวนการดังนั้นเราจึงไม่มีปัญหาการรั่วไหลของการเชื่อมต่อ เราได้ลองหลายสิ่งหลายอย่างในเวลาที่ไม่มาก: - รัน DBCC DROPCLEANBUFFERS (พร้อม CHECKPOINT) เพื่อล้างแคชข้อมูล …

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