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

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

5
อัปเดตด้วย JOIN ในบันทึก 100 มม. ทำอย่างไรให้ดีขึ้น? (ใน T-SQL)
ฉันต้องการอัปเดต 100 ล้านเรคคอร์ดในตารางเดียวโดยมีผลทำให้มาตรฐานของตารางเป็นปกติโดยแทนที่ค่า varchar ของคอลัมน์ด้วย ID เพียงอย่างเดียว (ฉันพูดว่า "การแทนที่" แต่จริงๆแล้วฉันกำลังเขียน ID ลงในคอลัมน์อื่น) สิ่งที่ฉันพยายามทำให้สำเร็จคือการทำให้ชุดข้อมูลเป็นมาตรฐาน ข้อมูลที่ยังไม่ได้ทำให้เป็นมาตรฐานไม่มีการจัดทำดัชนี ความคิดของฉันคือฉันจะไม่สร้างดัชนีในค่า raw รอแทนดัชนีคีย์ต่างประเทศที่จะแทนที่ค่า varchar ด้วยค่าจิ๋วจินหลังจากการอัพเดตเสร็จสมบูรณ์ UPDATE A SET A.AutoClassID = B.AutoClassID FROM AutoDataImportStaging.dbo.Automobile as A JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName) พื้นหลัง ใช้ MSSQL 2008 R2 บนเซิร์ฟเวอร์ 2008 R2 เซิร์ฟเวอร์มี RAM 8 GB เซิร์ฟเวอร์มีหนึ่ง …

1
จำนวนจริงบวกต่ำสุดที่เป็นไปได้จริงคืออะไร
MSDN กล่าวว่าช่วงของตัวเลข REAL คือ - 3.40E + 38 ถึง -1.18E - 38, 0 และ 1.18E - 38 ถึง 3.40E + 38 ดูเหมือนว่าขีด จำกัด ล่างที่แท้จริงนั้นต่ำกว่ามาก สคริปต์ต่อไปนี้จะเติมคอลัมน์ REAL ด้วย 1.401298E-45: CREATE TABLE a ( r1 REAL NULL , r2 REAL NULL , r3 REAL NULL ) ; GO INSERT INTO a ( …

1
ใช้ FLOATs กับ RAISERROR
ฉันใช้RAISERROR()เพื่อจัดเตรียมฟังก์ชั่นการทดสอบหน่วยพื้นฐาน (ตามที่นี่ ) แต่ฉันรู้สึกหงุดหงิดกับการไม่สามารถใช้งานได้FLOATsในข้อความแสดงข้อผิดพลาด ฉันรู้ว่าฉันสามารถส่งทุ่นไปที่สตริง แต่ฉันใช้RAISERRORในการทดสอบหน่วยเดียวทุกครั้งฉันไม่ต้องการเพิ่มโค้ดอีกบรรทัดหนึ่งสำหรับการทดสอบทุกครั้ง (การทดสอบหน่วยของฉันมีคำพูดมากพอ!) มีวิธีในการแปลง / แปลงแบบอินไลน์ภายในRAISERRORรายการพารามิเตอร์หรือไม่? หรือมีวิธีอื่นในการแก้ไขข้อบกพร่องนี้หรือไม่? อัปเดต: ดังนั้นในที่สุดสิ่งที่ฉันหวังว่าฉันจะทำได้คือ: RAISERROR('Unit Test FAILED! %f', 11, 0, @floatParm) น่าเสียดายที่RAISERRORไม่ใช้% f หรือลอยโดยทั่วไป ดังนั้นฉันต้องทำสิ่งนี้แทน: DECLARE @str VARCHAR(40) = CAST(@floatParm AS VARCHAR(40)) RAISERROR('Unit Test FAILED! %s', 11, 0, @str) ... ซึ่งดูเหมือนจะยุ่งเหยิงเมื่อมันกระจายผ่านการทดสอบหน่วยนับสิบ ดังนั้นฉันต้องการต้มมันลงไปที่สิ่งนี้: RAISERROR('Unit Test FAILED! %s', 11, 0, CAST(@floatParm AS VARCHAR(40)) …
11 sql-server  t-sql 

1
จัดเรียงข้อมูล SQL Server และไฟล์บันทึกการทำงานด้วย MoveFile API
นายจ้างของฉันกำลังมองหาการปรับใช้ซอฟต์แวร์การจัดเรียงข้อมูล NTFS ที่ใช้ Windows MoveFile API เพื่อจัดเรียงข้อมูลไฟล์ที่เปิดอยู่ สิ่งนี้จะได้รับการปรับใช้กับเซิร์ฟเวอร์ SQL Server นับพันที่รัน SQL เวอร์ชันตั้งแต่ 2005-2012 และ Windows เวอร์ชั่นตั้งแต่ปี 2003 และ 2008 R2 หากเป็นเรื่องสำคัญผลิตภัณฑ์ที่ฉันกำลังพูดถึงคือ PerfectDisk แต่ฉันเชื่อว่ามีโปรแกรมที่คล้ายกันซึ่งทำงานในลักษณะเดียวกัน การทดสอบจนถึงตอนนี้ยังไม่พบปัญหามากมายนอกเหนือจากปัญหาประสิทธิภาพ I / O เป็นครั้งคราวซึ่งไม่แปลกใจและสามารถแก้ไขได้ด้วยการจัดกำหนดการใหม่และปรับการจัดระเบียบ อย่างไรก็ตามฉันกังวลเกี่ยวกับความเสี่ยงของข้อมูลที่เสียหายมากขึ้น ใครบ้างที่นี่มีประสบการณ์ใช้งานซอฟต์แวร์ประเภทนี้ในการผลิตบนเซิร์ฟเวอร์ฐานข้อมูลหรือไม่ คุณเคยประสบปัญหาข้อมูลเสียหายหรือไม่? ฉันค่อนข้างไม่สบายใจเกี่ยวกับเรื่องนี้แม้ว่าจะไม่สามารถหาหลักฐานที่ชัดเจนว่าเป็นปัญหา ขอบคุณสำหรับคำตอบใด ๆ แก้ไขเพื่อเพิ่ม: ความคิดที่น่ากลัวนี้เพิ่งถูกลืมไปแล้วอาจเป็นส่วนหนึ่งเนื่องจากคำเตือนบางอย่างที่ฉันให้ไว้

1
เหตุใด 10 ^ 37/1 จึงเกิดข้อผิดพลาดทางคณิตศาสตร์มากเกินไป
ต่อแนวโน้มล่าสุดของฉันในการเล่นกับจำนวนมากฉันเพิ่งต้มข้อผิดพลาดที่ฉันกำลังทำงานลงไปที่รหัสต่อไปนี้: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; ผลลัพธ์ที่ฉันได้รับสำหรับรหัสนี้คือ: 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. อะไร? ทำไมการดำเนินการ 3 รายการแรกถึงทำงานได้ …

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

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

2
มีวิธีการตั้งค่าในการโหลด / อ่านสาขาต้นไม้ด้วย HierarchyId
ฉันกำลังเล่นกับ HierarchyId และฉันยังไม่ได้คิดวิธีที่จะทำตามต่อไปนี้: แทรกทรีย่อยทั้งหมดในคราวเดียว ดึงทรีย่อยทั้งหมดในครั้งเดียว คำถามนี้เกี่ยวข้องกับคำถามก่อนหน้าของฉันและฉันสงสัยว่าวิธีเดียวที่จะทำงานสองอย่างนี้ให้สำเร็จด้วย HierarchyId คือหนึ่งโหนดหรือหนึ่งระดับในแต่ละครั้ง หากฉันใช้เส้นทางที่เป็นรูปธรรมการกระทำทั้งสองอย่างสามารถทำได้อย่างง่ายดายโดยคำสั่งพื้นฐานเดียว (และไม่สำคัญ) ฉันกำลังคิดถึงอะไร แก้ไข: ฉันพลาดวิธีย้ายทรีย่อย แต่ฉันเรียนรู้จากความคิดเห็นของ Mikael Eriksson

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

3
การอ้างอิงฐานข้อมูลโดยทางโปรแกรมผ่าน T-SQL
ฉันกำลังเขียนขั้นตอนการจัดเก็บที่ใช้ชื่อฐานข้อมูลเป็นอาร์กิวเมนต์และส่งกลับตารางของดัชนีของฐานข้อมูลและระดับการกระจายตัวของพวกเขา ขั้นตอนการจัดเก็บนี้จะอยู่ในฐานข้อมูล DBA ของเรา (ฐานข้อมูลที่มีตารางที่ DBA ใช้สำหรับการตรวจสอบและปรับปรุงสิ่งต่าง ๆ ) ระบบที่เป็นปัญหาคือ SQL Server 2008 R2 ทั้งหมดหากมีความแตกต่าง ฉันมีการสืบค้นพื้นฐานแล้ว แต่ฉันพยายามหาชื่อจริงของดัชนี เพื่อความรู้ที่ดีที่สุดของฉันข้อมูลนั้นจะอยู่ในมุมมอง sys.indexes ของแต่ละคน ปัญหาเฉพาะของฉันพยายามอ้างอิงที่ดูโดยทางโปรแกรมจากกระบวนงานที่เก็บไว้ของฐานข้อมูลอื่น เพื่อแสดงให้เห็นว่านี่เป็นส่วนของแบบสอบถามที่มีปัญหา: FROM sys.dm_db_index_physical_stats(@db_id,NULL,NULL,NULL,NULL) p INNER JOIN sys.indexes b ON p.[object_id] = b.[object_id] AND p.index_id = b.index_id AND b.index_id != 0 แบบสอบถามทำงานได้ดีเมื่อดำเนินการจากฐานข้อมูลที่ระบุโดย @db_id เนื่องจากใช้มุมมอง sys.indexes ที่เหมาะสม ถ้าฉันพยายามเรียกสิ่งนี้จากฐานข้อมูล DBA ทุกอย่างจะเป็นโมฆะเนื่องจากมุมมอง sys.indexes …
11 sql-server 

2
กู้คืนไฟล์ bak ไปยังไฟล์ฐานข้อมูล mdf และ ldf ที่เล็กกว่า
ฉันมีฐานข้อมูลดั้งเดิมที่ขาดการออกแบบที่น่ากลัวฉันจะไม่เข้าไปที่นี่ แต่ไฟล์บนเซิร์ฟเวอร์นั้นมีขนาดใหญ่มาก ฉันมี: MyDatabase.mdf: 24.8GB MyDatabase.ldf: 114.6GB ฐานข้อมูลนี้ถูกสำรองข้อมูลเป็นไฟล์. bak ทุกคืนและส่งไปยังเซิร์ฟเวอร์รายงานของเราซึ่งมีการกู้คืน ไฟล์. bak มีขนาดเล็กกว่ามากเพียง 1.8GB อย่างไรก็ตามเมื่อฉันพยายามกู้คืนบนเซิร์ฟเวอร์การรายงานมันล้มเหลวเนื่องจากมีพื้นที่ไม่เพียงพอ เซิร์ฟเวอร์มีพื้นที่ว่างประมาณ 100GB และพยายามทำลายไฟล์ทั้งหมดที่ใช้งานบนเซิร์ฟเวอร์ดั้งเดิม 139.4GB เว้นแต่ว่าฉันรู้ว่าการบีบอัดผิดอย่างน่ากลัวฉันค่อนข้างมั่นใจว่าไฟล์ 1.8GB นั้นไม่ได้เพิ่มขึ้น 7400% คำถามของฉัน: มีวิธีใดที่จะบอกให้ SQL Server กู้คืนไฟล์ข้อมูลสำรองนี้โดยไม่ต้องจองพื้นที่ล่วงหน้า ฉันไม่สนใจเกี่ยวกับบันทึกใด ๆ ฉันแค่ต้องการข้อมูลเพื่ออยู่ที่นั่น ฉันเข้าใจฐานข้อมูลจากมุมมองการพัฒนาและสคีมา แต่ฉันไม่เคยใช้ DBA ประเภทใดเลย นี่คือบน SQL Server 2008 R2 ขอบคุณสำหรับความช่วยเหลือหรือคำแนะนำ

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

2
sp_executesql กับประเภทตารางที่ผู้ใช้กำหนดไม่ทำงานอย่างถูกต้อง
ปัญหา : มีปัญหาที่ทราบเกี่ยวกับประเภทตารางที่ผู้ใช้กำหนดเป็นพารามิเตอร์สำหรับsp_executesqlหรือไม่ คำตอบ - ไม่ฉันเป็นคนงี่เง่า ตั้งค่าสคริปต์ สคริปต์นี้สร้างหนึ่งในแต่ละตารางขั้นตอนและประเภทตารางที่ผู้ใช้กำหนด (จำกัด SQL Server 2008+ เท่านั้น) จุดประสงค์ของกองคือเพื่อให้การตรวจสอบว่าใช่ข้อมูลทำให้เป็นขั้นตอน ไม่มีข้อ จำกัด ไม่มีสิ่งใดที่จะป้องกันไม่ให้มีการแทรกข้อมูล ขั้นตอนใช้เป็นพารามิเตอร์ที่ผู้ใช้กำหนดประเภทตาราง proc ทั้งหมดจะถูกแทรกลงในตาราง ประเภทตารางที่ผู้ใช้กำหนดนั้นเรียบง่ายเช่นกันเพียงแค่คอลัมน์เดียว ฉันเรียกใช้สิ่งต่อไปนี้11.0.1750.32 (X64) และ10.0.4064.0 (X64)ใช่ฉันรู้ว่ากล่องนั้นสามารถแก้ไขได้ฉันไม่ได้ควบคุมสิ่งนั้น -- this table record that something happened CREATE TABLE dbo.UDTT_holder ( ServerName varchar(200) , insert_time datetime default(current_timestamp) ) GO -- user defined table type transport …

5
วิธีฟื้นฟูตัวนับประสิทธิภาพ SQL Server 2008 R2
ฉันใช้ SQL Server 2008 R2 Developer บน Windows 7 x64 เป็นอินสแตนซ์เริ่มต้น ด้วยเหตุผลบางอย่างเคาน์เตอร์วัดประสิทธิภาพของ SQL Server ดูเหมือนจะหายไป SELECT * FROM sys.dm_os_performance_countersส่งกลับศูนย์แถว lodctr /T:perf-MSSQLSERVERsqlctr.iniผมพยายามทำงาน แม้ว่ามันจะเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด แต่ก็ไม่ได้แก้ไขอะไรแม้หลังจากรีสตาร์ทบริการรีจิสตรี ที่จริงเคาน์เตอร์หายไปจาก perfmon แล้ว unlodctr MSSQLSERVERยังคงบอกว่าตัวนับไม่ได้รับการติดตั้ง แต่lodctr /Q:MSSQLSERVERบอกว่ามีอยู่และเปิดใช้งานอยู่ ตัวนับ Windows และ. NET ปกติทำงานได้ดี ในบันทึกข้อผิดพลาดของ Windows ฉันเห็นข้อผิดพลาด 8317: ไม่สามารถสอบถามค่า 'ตัวนับแรก' ที่เกี่ยวข้องกับรีจิสตรีคีย์ 'HKLM \ SYSTEM \ CurrentControlSet \ Services \ …

5
SQL Server เก็บผลลัพธ์ของกระบวนการแคชข้อมูลหรือไม่
ฉันเคยได้ยินเรื่องนี้จากเพื่อน แต่ฉันไม่เคยตรวจสอบว่าเรื่องนี้เป็นเรื่องจริงหรือไม่ เป็นความจริงหรือไม่ที่ผลลัพธ์ข้อมูลของคิวรีที่ดำเนินการถูกเก็บไว้ในแคช? ฉันหมายถึงถ้าฉันมีขั้นตอนการจัดเก็บเช่น: SELECT * FROM USERLIST ... เป็นความจริงหรือไม่ที่ผลลัพธ์ (รายการผู้ใช้ในกรณีนี้) ถูกเก็บไว้ในแคช นอกจากนี้ถ้าฉันมีสิ่งเหล่านี้: SELECT * FROM USERLIST WHERE user="user" SELECT * FROM USERLIST WHERE user="userzzz" (ผู้ใช้ / userzzz ถูกส่งผ่านเป็นพารามิเตอร์) ถูกต้องหรือไม่ว่ามันเก็บผลลัพธ์ที่แตกต่างกัน 2 รายการไว้ในแคชฐานข้อมูล ฉันไม่คิดอย่างนั้น แต่ฉันต้องการคำยืนยันจากคุณผู้เชี่ยวชาญ!

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