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

ใช้แท็กนี้สำหรับคำถามเฉพาะของ Microsoft SQL Server รุ่น 2008

5
คลัสเตอร์เทียบกับไม่ใช่คลัสเตอร์
ความรู้ระดับล่างของฉันเกี่ยวกับ SQL (Server 2008) มี จำกัด และขณะนี้ DBA ของเราได้รับการพิสูจน์แล้ว ให้ฉันอธิบาย (ฉันได้กล่าวถึงข้อความที่ชัดเจนด้วยความหวังว่าฉันถูก แต่ถ้าคุณเห็นบางอย่างผิดปกติโปรดบอกฉัน) สถานการณ์: เรามีโต๊ะที่มี 'คำสั่งศาล' สำหรับผู้คน เมื่อฉันสร้างตาราง (ชื่อ: CourtOrder) ฉันสร้างมันดังนี้: CREATE TABLE dbo.CourtOrder ( CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key) PersonId INT NOT NULL, + around 20 other fields of different types. ) จากนั้นฉันใช้ดัชนีที่ไม่ใช่คลัสเตอร์กับคีย์หลัก (เพื่อประสิทธิภาพ) เหตุผลของฉันคือมันเป็นฟิลด์ที่ไม่ซ้ำกัน (คีย์หลัก) และควรจัดทำดัชนีเพื่อจุดประสงค์ในการเลือกเป็นหลักเนื่องจากเรามักจะSelect from …

14
ฉันจะทำให้งาน“ สร้างสคริปต์” เป็นอัตโนมัติใน SQL Server Management Studio 2008 ได้อย่างไร
ฉันต้องการสร้างสคริปต์โดยอัตโนมัติใน SQL Server Management Studio 2008 ตอนนี้สิ่งที่ฉันทำคือ: คลิกขวาที่ฐานข้อมูลของฉัน Tasks "Generate Scripts ... " เลือกตัวเลือกการส่งออกทั้งหมดที่ฉันต้องการด้วยตนเองและกดเลือกทั้งหมดบนแท็บ "เลือกวัตถุ" เลือกโฟลเดอร์ส่งออก ในที่สุดก็กดปุ่ม "เสร็จสิ้น" มีวิธีทำให้งานนี้เป็นไปโดยอัตโนมัติหรือไม่? แก้ไข: ฉันต้องการสร้างสคริปต์การสร้างไม่ใช่เปลี่ยนสคริปต์

13
คุณสมบัติที่ขึ้นต่อกันใน ReferentialConstraint ถูกแมปกับคอลัมน์ที่สร้างโดยร้านค้า
ฉันได้รับข้อผิดพลาดนี้เมื่อเขียนไปยังฐานข้อมูล: คุณสมบัติที่ขึ้นต่อกันใน ReferentialConstraint ถูกแม็พกับคอลัมน์ที่สร้างโดยร้านค้า คอลัมน์: 'PaymentId' public bool PayForItem(int terminalId, double paymentAmount, eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId) { using (var dbEntities = new DatabaseAccess.Schema.EntityModel()) { int pinnumber = 0; long pinid = 1; //getPinId(terminalId,ref pinnumber) ; var payment = new DatabaseAccess.Schema.Payment(); payment.CategoryId = CategoryId; payment.ItemCategoryId = CategoryItemId; payment.PaymentAmount = …

10
ฉันจะดูเนื้อหาทั้งหมดของคอลัมน์ข้อความหรือ varchar (MAX) ใน SQL Server 2008 Management Studio ได้อย่างไร
ในการนี้สด SQL Server 2008 (สร้าง 10.0.1600) ฐานข้อมูลมีการEventsตารางซึ่งมีคอลัมน์ชื่อtext Details(ใช่ฉันรู้ว่านี่ควรเป็นvarchar(MAX)คอลัมน์ แต่ใครก็ตามที่ตั้งค่าฐานข้อมูลนี้ไม่ได้ทำเช่นนั้น) คอลัมน์นี้มีบันทึกข้อยกเว้นขนาดใหญ่มากและข้อมูล JSON ที่เกี่ยวข้องซึ่งฉันพยายามเข้าถึงผ่าน SQL Server Management Studio แต่เมื่อใดก็ตามที่ฉันคัดลอกผลลัพธ์จากกริดไปยังโปรแกรมแก้ไขข้อความมันจะตัดทอนที่ 43679 อักขระ ฉันได้อ่านในสถานที่ต่างๆบนอินเทอร์เน็ตว่าคุณสามารถตั้งค่าอักขระสูงสุดที่ดึงมาสำหรับข้อมูล XML Tools > Options > Query Results > SQL Server > Results To Gridเป็นไม่ จำกัด แล้วดำเนินการค้นหาดังนี้: select Convert(xml, Details) from Events where EventID = 13920 (โปรดทราบว่าข้อมูลเป็นคอลัมน์ไม่ใช่ XML แต่อย่างใดCONVERTการที่คอลัมน์เป็น XML เป็นเพียงวิธีแก้ปัญหาที่พบจาก …

7
ไม่สามารถใช้เพรดิเคต CONTAINS หรือ FREETEXT บนตารางหรือมุมมองที่จัดทำดัชนีได้เนื่องจากไม่ได้จัดทำดัชนีข้อความแบบเต็ม
ฉันได้รับข้อผิดพลาดต่อไปนี้ในฐานข้อมูล SQL Server 2008 R2 ของฉัน: ไม่สามารถใช้CONTAINSหรือFREETEXTกริยาบนโต๊ะหรือมุมมองที่จัดทำดัชนี 'tblArmy' เพราะมันไม่ได้ข้อความเต็มรูปแบบการจัดทำดัชนี

14
รับวันแรกของสัปดาห์ใน SQL Server
ฉันพยายามจัดกลุ่มบันทึกตามสัปดาห์โดยจัดเก็บวันที่รวมเป็นวันแรกของสัปดาห์ อย่างไรก็ตามเทคนิคมาตรฐานที่ฉันใช้ในการปัดเศษวันที่ไม่ทำงานอย่างถูกต้องในสัปดาห์ (แม้ว่าจะใช้เป็นวันเดือนปีไตรมาสและกรอบเวลาอื่น ๆ ที่ฉันใช้กับ) นี่คือ SQL: select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), 0); ผลตอบแทนนี้2011-08-22 00:00:00.000ซึ่งเป็นวันจันทร์ไม่ใช่วันอาทิตย์ เลือก@@datefirstผลตอบแทน7ซึ่งเป็นรหัสสำหรับวันอาทิตย์ดังนั้นเซิร์ฟเวอร์จึงตั้งค่าได้อย่างถูกต้องเท่าที่ฉันทราบ ฉันสามารถข้ามสิ่งนี้ได้อย่างง่ายดายโดยเปลี่ยนรหัสด้านบนเป็น: select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), -1); แต่การที่ฉันต้องทำข้อยกเว้นนั้นทำให้ฉันไม่สบายใจเล็กน้อย นอกจากนี้ขออภัยหากเป็นคำถามที่ซ้ำกัน ฉันพบคำถามที่เกี่ยวข้อง แต่ไม่มีคำถามที่กล่าวถึงประเด็นนี้โดยเฉพาะ

7
ขั้นตอนที่จัดเก็บช้าเมื่อเรียกจากเว็บอย่างรวดเร็วจาก Management Studio
ฉันมีขั้นตอนการจัดเก็บที่หมดเวลาอย่างบ้าคลั่งทุกครั้งที่เรียกจากเว็บแอปพลิเคชัน ฉันเริ่มใช้ Sql Profiler และติดตามการโทรที่หมดเวลาและในที่สุดก็พบสิ่งเหล่านี้: เมื่อดำเนินการคำสั่งจากภายใน MS SQL Management Studio โดยมีอาร์กิวเมนต์เดียวกัน (อันที่จริงฉันคัดลอกการเรียกโพรซีเดอร์จากการติดตามโปรไฟล์ sql และรัน): มันจะเสร็จสิ้นใน 5 ~ 6 วินาทีโดยเฉลี่ย แต่เมื่อเรียกจากเว็บแอปพลิเคชันจะใช้เวลานานกว่า 30 วินาที (ตามรอย) ดังนั้นหน้าเว็บของฉันจึงหมดเวลาจริง นอกเหนือจากข้อเท็จจริงที่ว่าเว็บแอปพลิเคชันของฉันมีผู้ใช้เป็นของตัวเองทุกสิ่งก็เหมือนกัน (ฐานข้อมูลเดียวกันการเชื่อมต่อเซิร์ฟเวอร์ ฯลฯ ) ฉันยังลองเรียกใช้แบบสอบถามโดยตรงในสตูดิโอกับผู้ใช้เว็บแอปพลิเคชันและใช้เวลาไม่เกิน 6 วินาที ฉันจะทราบได้อย่างไรว่าเกิดอะไรขึ้น ฉันคิดว่ามันไม่มีส่วนเกี่ยวข้องกับการที่เราใช้เลเยอร์ BLL> DAL หรืออะแดปเตอร์ตารางเนื่องจากการติดตามแสดงให้เห็นอย่างชัดเจนถึงความล่าช้าในขั้นตอนจริง นั่นคือทั้งหมดที่ฉันคิดได้ แก้ไขฉันพบในลิงค์นี้ว่า ADO.NET ตั้งค่าARITHABORTเป็นจริงซึ่งเป็นสิ่งที่ดีสำหรับเกือบตลอดเวลา แต่บางครั้งสิ่งนี้ก็เกิดขึ้นและวิธีแก้ปัญหาที่แนะนำคือการเพิ่มwith recompileตัวเลือกให้กับ proc ที่เก็บไว้ ในกรณีของฉันมันใช้ไม่ได้ แต่ฉันสงสัยว่ามันคล้ายกับสิ่งนี้มาก มีใครรู้บ้างว่า ADO.NET ทำอะไรอีกหรือหา spec …

3
การจัดเก็บ DateTime (UTC) เทียบกับการจัดเก็บ DateTimeOffset
ฉันมักจะมี "ตัวสกัดกั้น" ที่อยู่ก่อนที่จะอ่าน / เขียนจาก / ไปยังฐานข้อมูลทำการแปลง DateTime (จากเวลา UTC เป็นเวลาท้องถิ่นและจากเวลาท้องถิ่นเป็น UTC) ดังนั้นฉันจึงสามารถใช้DateTime.Now(อนุพันธ์และการเปรียบเทียบ) ได้ทั่วทั้งระบบโดยไม่ต้องกังวล เกี่ยวกับเขตเวลา เกี่ยวกับการทำให้เป็นอนุกรมและการย้ายข้อมูลระหว่างคอมพิวเตอร์ไม่จำเป็นต้องกังวลเนื่องจากวันที่และเวลาเป็น UTC เสมอ ฉันควรจัดเก็บวันที่ของฉันต่อไป (SQL 2008 - วันที่และเวลา) ในรูปแบบ UTC หรือควรเก็บไว้โดยใช้DateTimeOffset(SQL 2008 - datetimeoffset) วันที่ UTC ในฐานข้อมูล (ประเภทวันที่และเวลา) ใช้งานได้และเป็นที่รู้จักมานานแล้วทำไมต้องเปลี่ยน ข้อดีคืออะไร? ฉันได้ดูบทความเช่นนี้แล้ว แต่ฉันไม่มั่นใจ 100% ความคิดใด ๆ ?

11
จะฆ่า / หยุดแบบสอบถาม SQL แบบยาวทันทีได้อย่างไร?
ฉันใช้ SQL Server 2008 และสตูดิโอการจัดการ ฉันดำเนินการค้นหาที่ให้ผลหลายแถว ฉันพยายามยกเลิกผ่านปุ่มยกเลิกสีแดง แต่มันยังไม่หยุดในช่วง 10 นาทีที่ผ่านมา โดยปกติจะหยุดภายใน 3 นาที สาเหตุเกิดจากอะไรและฉันจะหยุดทันทีได้อย่างไร

3
การมี 'OR' ในเงื่อนไข INNER JOIN เป็นความคิดที่ไม่ดีหรือไม่?
ในการพยายามปรับปรุงความเร็วของแบบสอบถามที่ช้ามาก (หลายนาทีในสองตารางโดยมีแถวละประมาณ 50,000 แถวเท่านั้นบน SQL Server 2008 ถ้าเป็นเรื่องสำคัญ) ฉันได้ จำกัด ปัญหาให้แคบลงเป็นการรวมORภายในของฉันเช่นใน: SELECT mt.ID, mt.ParentID, ot.MasterID FROM dbo.MainTable AS mt INNER JOIN dbo.OtherTable AS ot ON ot.ParentID = mt.ID OR ot.ID = mt.ParentID ฉันเปลี่ยนสิ่งนี้เป็น (สิ่งที่ฉันหวังคือ) การรวมด้านซ้ายคู่ที่เทียบเท่าแสดงที่นี่: SELECT mt.ID, mt.ParentID, CASE WHEN ot1.MasterID IS NOT NULL THEN ot1.MasterID ELSE ot2.MasterID END AS …

3
วิธีแก้ไขหนึ่งแถวเฉพาะใน Microsoft SQL Server Management Studio 2008
ใน Microsoft SQL Server Management Studio 2008 มีความลับที่สามารถแก้ไขหนึ่งแถวตามคีย์ได้หรือไม่ มีตัวเลือกให้ "แก้ไข 200 อันดับสูงสุด" แต่ถ้าฉันต้องการเลือกแถวอื่นและแก้ไขในดาต้ากริดล่ะ? ฉันอยากจะทำแบบนั้นมากกว่าเขียนโค้ดคำสั่งอัปเดตและเสี่ยงที่จะทำให้ประโยคคำสั่งนั้นผิดพลาด

4
จำกัด คอลัมน์ varchar () เฉพาะค่าหรือไม่
มีวิธีระบุค่าที่แตกต่างกันเช่น 4 ค่าสำหรับคอลัมน์ varchar ใน MS SQL Server 2008 หรือไม่ ตัวอย่างเช่นฉันต้องการคอลัมน์ที่เรียกว่าความถี่ (varchar) ที่ยอมรับเฉพาะค่า 'รายวัน', 'รายสัปดาห์', 'รายเดือน', 'รายปี' เท่านั้น เป็นไปได้ไหมที่จะตั้งค่าภายในสตูดิโอจัดการเซิร์ฟเวอร์ SQL เมื่อสร้างตาราง

7
จะพิมพ์ GETDATE () ใน SQL Server โดยใช้เวลาเป็นมิลลิวินาทีได้อย่างไร?
ฉันต้องการพิมพ์GETDATE ()ใน SQL Server 2008 ฉันต้องการเวลาเป็นมิลลิวินาที (นี่คือจุดประสงค์ในการดีบัก - เพื่อค้นหาเวลาดำเนินการของ sp) ฉันพบความแตกต่างนี้ SELECT GETDATE()ส่งคืน2011-03-15 18: 43: 44.100 print GETDATE()ส่งคืน15 มี.ค. 2554 18:44 น ฉันคิดว่า SQL Server พิมพ์คาสต์โดยอัตโนมัติในฟังก์ชันการพิมพ์ ฉันต้องพิมพ์วันที่แบบนี้ 2011-03-15 18:43:44.100 ขอบคุณสำหรับความช่วยเหลือของคุณ.

7
มีวิธีเข้าถึงค่า“ แถวก่อนหน้า” ในคำสั่ง SELECT หรือไม่?
ฉันต้องการคำนวณความแตกต่างของคอลัมน์ระหว่างสองบรรทัดของตาราง มีวิธีใดบ้างที่ฉันสามารถทำได้โดยตรงใน SQL ฉันใช้ Microsoft SQL Server 2008 ฉันกำลังมองหาสิ่งนี้: SELECT value - (previous.value) FROM table จินตนาการว่าตัวแปร "ก่อนหน้า" อ้างอิงแถวล่าสุดที่เลือก แน่นอนว่าการเลือกแบบนั้นฉันจะลงเอยด้วย n-1 แถวที่เลือกในตารางที่มี n แถวนั่นอาจไม่ใช่สิ่งที่ฉันต้องการจริงๆ เป็นไปได้ในทางใดทางหนึ่ง?

3
มี StartsWith หรือมีใน t sql พร้อมตัวแปรหรือไม่
ฉันกำลังพยายามตรวจสอบว่าเซิร์ฟเวอร์กำลังเรียกใช้ Express Edition หรือไม่ ฉันมี t sql ต่อไปนี้ DECLARE @edition varchar(50); set @edition = cast((select SERVERPROPERTY ('edition')) as varchar) print @edition ในตัวอย่างของฉัน @edition = Express Edition (64-bit) ฉันจะทำสิ่งต่อไปนี้ได้อย่างไร? (C # แรงบันดาลใจ) DECLARE @isExpress bit; set @isExpress = @edition.StartsWith('Express Edition');

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