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

SQL Server 2008 (รุ่นบิลด์หลัก 10.00.xxxx) โปรดติดแท็กด้วย sql-server

3
เป็นไปได้หรือไม่ที่จะเลือก RAISERROR หรือ THROW ขึ้นอยู่กับรุ่นของ SQL Server
นี่คือรหัสของฉันตอนนี้: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH ใช้งานได้ดีเว้นแต่ว่ามันจะทำงานบนเครื่องที่มี SQL 2008 ฉันต้องการให้ CATCH block ทำการตรวจสอบกับเวอร์ชันของ SQL และเรียกใช้ THROW ถ้ามันเท่ากับหรือสูงกว่าถึง 2012 และ RAISERROR ถ้าเป็น 2008 ฉันจะทำงานต่อไป ข้อผิดพลาดทางไวยากรณ์และฉันสงสัยว่ามันเป็นไปได้ แม้แต่สิ่งที่เรียบง่ายเช่นนี้ก็ไม่ได้ผลสำหรับฉัน BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH คำแนะนำใด ๆ ที่ชื่นชม

2
ไม่พบกระบวนการที่กำลังสร้างการสำรองข้อมูล
เรามีอินสแตนซ์ของ SQL Server 2008 ติดตั้งบนเซิร์ฟเวอร์ลูกค้า แผนกไอทีของลูกค้ารับผิดชอบการสำรองข้อมูลต่าง ๆ ของเครื่อง บันทึก SQL Server แสดงว่ามีการสำรองข้อมูลเต็มรูปแบบทุกวันเวลา 19.00 น. แต่เราไม่สามารถหาหลักฐานของแผนใด ๆ ที่กำหนดไว้ใน SQL Server ช่างเทคนิคที่เราติดต่อไม่สามารถบอกเราได้ว่ามีการสำรองข้อมูลอัตโนมัติบางประเภทสิ่งที่พวกเขาบอกคือเครื่องทั้งหมดกำลังสำรอง การใช้สคริปต์ที่ฉันพบในเธรดฟอรัมนี้ฉันพบว่าชื่ออุปกรณ์จริงคือ GUID และนั่นหมายความว่านี่เป็นกระบวนการสำรองข้อมูลภายนอก : USE [msdb] GO SELECT [bs].[database_name], [bs].[backup_start_date], [bs].[backup_finish_date], [bs].Server_name, [bs].user_name AS [BackupCreator] , [bmf].physical_device_name FROM msdb..backupset bs INNER JOIN msdb..backupmediafamily bmf ON [bs].[media_set_id] = [bmf].[media_set_id] ORDER BY …

1
วิธีตั้งค่ามุมมองที่จัดทำดัชนีไว้เมื่อเลือก TOP 1 ด้วย ORDER BY จากตารางที่แตกต่างกัน
ฉันกำลังพยายามติดตั้งมุมมองที่จัดทำดัชนีไว้ในสถานการณ์จำลองต่อไปนี้เพื่อให้แบบสอบถามต่อไปนี้ทำงานได้โดยไม่สแกนดัชนีคลัสเตอร์ เมื่อใดก็ตามที่ฉันสร้างมุมมองดัชนีสำหรับแบบสอบถามนี้แล้วใช้มันดูเหมือนว่าจะไม่สนใจดัชนีใด ๆ ที่ฉันวางไว้: -- +++ THE QUERY THAT I WANT TO IMPROVE PERFORMANCE-WISE +++ SELECT TOP 1 * FROM dbo.TB_test1 t1 INNER JOIN dbo.TB_test2 t2 ON t1.PK_ID1 = t2.FK_ID1 ORDER BY t1.somethingelse1 ,t2.somethingelse2; GO การตั้งค่าตารางมีดังนี้: สองตาราง พวกเขาจะเข้าร่วมโดยการเข้าร่วมภายในโดยแบบสอบถามด้านบน และเรียงลำดับโดยคอลัมน์จากคอลัมน์แรกจากนั้นคอลัมน์จากตารางที่สองโดยแบบสอบถามด้านบน เลือก TOP 1 เท่านั้น (ในสคริปต์ด้านล่างมีบางบรรทัดเพื่อสร้างข้อมูลทดสอบในกรณีที่ช่วยทำให้เกิดปัญหา) -- +++ TABLE SETUP +++ CREATE …

3
เรียงซ้อนการอัปเดตคีย์หลักเป็นคีย์ต่างประเทศที่อ้างอิงทั้งหมด
เป็นไปได้หรือไม่ที่จะอัพเดตค่าคอลัมน์คีย์หลักที่มีการเรียงซ้อนการอัพเดตระหว่างคีย์ต่างประเทศทั้งหมดที่อ้างถึง? # แก้ไข 1: เมื่อฉันเรียกใช้แบบสอบถาม followinq select * from sys.foreign_keys where referenced_object_id=OBJECT_ID('myTable') ฉันเห็นว่า update_referential_action ตั้งเป็น 0 ดังนั้นจะไม่มีการดำเนินการใด ๆ หลังจากอัปเดตคอลัมน์คีย์หลักของฉัน ฉันจะอัปเดตคีย์ต่างประเทศเพื่อใช้เป็นCASCADE UPDATE ได้อย่างไร # EDIT 2: เพื่อให้สคริปต์ออกสร้างหรือวางกุญแจต่างประเทศทั้งหมดในสคีมาของคุณให้เรียกใช้สคริปต์ต่อไปนี้ (นำมาจากที่นี่ ) DECLARE @schema_name sysname; DECLARE @table_name sysname; DECLARE @constraint_name sysname; DECLARE @constraint_object_id int; DECLARE @referenced_object_name sysname; DECLARE @is_disabled bit; DECLARE @is_not_for_replication bit; DECLARE …

3
รับการเกิดขึ้นครั้งที่ 2 หรือ 3 ของค่าในสตริงที่มีการคั่น
ฉันมีตารางต่อไปนี้: ========================================================== | Name_Level_Class_Section | Phone Num | ========================================================== | Jacky_1_B2_23 | 1122554455 | | Johnhy_1_B2_24 | 1122554455 | | Peter_2_A5_3 | 1122554455 | ========================================================== ฉันกำลังคิดที่จะทำให้คำสั่ง SQL ของฉันง่ายขึ้นดังต่อไปนี้: select *, substring(Name_Level_Class_Section, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_', Name_Level_Class_Section) + 1)) + 1, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))+1))- CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))) as CLA from Bookings order by CLA …

4
ฉันจะเขียนคิวรีหน้าต่างที่รวมคอลัมน์เพื่อสร้างที่เก็บข้อมูลแยกได้อย่างไร?
ฉันมีตารางที่มีคอลัมน์ของค่าทศนิยมเช่นนี้ id value size -- ----- ---- 1 100 .02 2 99 .38 3 98 .13 4 97 .35 5 96 .15 6 95 .57 7 94 .25 8 93 .15 สิ่งที่ฉันต้องทำให้สำเร็จเป็นเรื่องยากที่จะอธิบายดังนั้นโปรดอดทนด้วย สิ่งที่ผมพยายามทำคือการสร้างมูลค่ารวมของsizeคอลัมน์ที่เพิ่มขึ้นโดยที่ 1 ในแต่ละครั้งแถวก่อนหน้านี้รวมถึง 1 valueเมื่อเรียงลำดับตาม ผลลัพธ์จะเป็นดังนี้: id value size bucket -- ----- ---- ------ 1 100 .02 1 …

3
การปัดเศษทศนิยมอัตโนมัติ
คำถามนั้นค่อนข้างง่าย ฉันต้องการคำนวณ 3 คอลัมน์ที่ผลลัพธ์กลางคือทศนิยมมากและฉันพบปัญหาในช่วงต้นกับ SQL Server โดยทั่วไปการปัดเศษทศนิยมโดยไม่คำนึงถึงการแปลง / แปลงใด ๆ ตัวอย่างเช่นลองทำหารง่าย ๆ เป็น 1234/1233 เครื่องคิดเลขจะผลิต 1,00081103000811 แต่เมื่อฉันทำเช่นนี้บน SQL Server เราได้รับต่อไปนี้: -- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37)) -- Result: rounded at 1.000811 SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233) -- …

5
การตั้งค่าหน่วยความจำสูงสุดใน SQL Server
ฉันใช้ SQL Server 2008 และแอปพลิเคชันบนเว็บบนเซิร์ฟเวอร์เฉพาะเครื่องเดียวมีหน่วยความจำเพียง 2Gb เท่านั้น ตามที่ระบุไว้ที่อื่น SQL Server ใช้หน่วยความจำกายภาพสูงสุดถึง 98% เป็นประจำซึ่งดูเหมือนจะทำให้เว็บแอพพลิเคชันทำงานช้าลงบนเซิร์ฟเวอร์ ในคุณสมบัติเซิร์ฟเวอร์ใน SSMS ภายใต้หน่วยความจำหน่วยความจำเซิร์ฟเวอร์สูงสุด (เป็น Mb) ถูกตั้งค่าเป็น: 2147483647 คำถามของฉันคือจำนวนที่แนะนำที่จะใส่ในกล่องหน่วยความจำเซิร์ฟเวอร์สูงสุดตามจำนวนหน่วยความจำที่ฉันมีอยู่และเซิร์ฟเวอร์เดียวกันก็ใช้งานเว็บแอปพลิเคชันด้วยหรือไม่ นอกจากนี้การเปลี่ยนหมายเลขนี้เป็นเรื่องที่ปลอดภัยหรือไม่ในขณะที่ SQL Server กำลังทำงานอยู่ ขอบคุณสำหรับคำแนะนำ.

1
ทำไมเซิร์ฟเวอร์ sql จำเป็นต้องแปลงผลลัพธ์ count (*) เป็น int ก่อนที่จะเปรียบเทียบกับตัวแปร int?
ฉันมีคำถามมากมายในแอปพลิเคชันของฉันซึ่งในประโยคที่มีฉันมีการเปรียบเทียบฟังก์ชั่นการนับรวมกับตัวแปร int ในแผนคิวรีฉันสามารถเห็น implicit_convert ก่อนการเปรียบเทียบ ฉันต้องการทราบว่าทำไมสิ่งนี้เกิดขึ้นเพราะตามเอกสารเซิร์ฟเวอร์ sql ฟังก์ชั่นการนับกลับเป็น int เหตุใดจึงต้องมีการแปลงโดยนัยสำหรับการเปรียบเทียบค่า int สองค่า ต่อไปนี้เป็นส่วนหนึ่งของแผนแบบสอบถามหนึ่งที่ @IdCount ถูกกำหนดให้เป็นตัวแปร int | --Filter (สถานที่: ([Expr1022] = [@ IdCount])) | - คำนวณสเกลาร์ (คำจำกัดความ: ([Expr1022] = CONVERT_IMPLICIT (int, [Expr1028], 0))) | - สตรีมรวม (กลุ่มตาม: ([MOCK_DB]. [dbo]. [ขอบเขต]. [ขอบเขต ID]) กำหนด: ([Expr1028] = จำนวน (*)))

2
SQL Server 2008 R2 กู้คืนการสำรองข้อมูลเต็มรูปแบบ COPY_ONLY พร้อมบันทึกธุรกรรม
หลังจากทำวิจัยฉันไม่สามารถหาคำตอบสำหรับคำถามนี้ได้ ความเป็นมาฉันกำลังพยายามตั้งค่าแผนสำรองที่เหมาะกับข้อกำหนดสามข้อต่อไปนี้: ความน่าเชื่อถือของการสำรองข้อมูลมีการสำรองข้อมูลเต็มรูปแบบทุกคืน การสำรองข้อมูลบันทึกธุรกรรมที่สามารถกู้คืนได้ ใช้พื้นที่ดิสก์ในระดับต่ำ การสำรองข้อมูลต้องสามารถเข้าถึงได้ในเครื่องสำหรับเครื่องมือตรวจสอบ ดังนั้นเพื่อให้เหมาะกับความต้องการเหล่านั้นฉันจึงคิดว่าการสำรองข้อมูลเต็มรูปแบบทุกสัปดาห์ความแตกต่างรายวันและธุรกรรมรายชั่วโมง จากนั้นทุกคืนจะมีการสำรองข้อมูล copy_only ซึ่งสามารถจัดส่งนอกสถานที่ได้การสำรองข้อมูลนี้จะทำเพื่อไม่ให้ห่วงโซ่การบันทึกเสียหายและเรามีการสำรองข้อมูลเต็มรูปแบบที่เชื่อถือได้ทุกคืนโดยไม่ต้องกินพื้นที่ดิสก์ในท้องถิ่นมากนัก คำถามเป็นไปได้ไหมที่จะกู้คืนจากข้อมูลสำรอง copy_only และกู้คืนบันทึกธุรกรรมหลังจาก ให้ฉันเป็นตัวอย่างให้คุณรู้ว่าฉันกำลังพูดถึงอะไร ใช้รายการด้านล่างฉันสงสัยว่ามันเป็นไปได้ที่จะเรียกคืน FullbackupCOPY_ONLYC.bak ตามด้วย TransactionbackupG.trn, TransactionbackupH.trn, สุดท้าย TransactionbackupI.trn > ---List of Backups--- FullbackupA.bak 01/01/2013 00:00:00 > DifferntialbackupA.bak 02/01/2013 00:00:00 FullbackupCOPY_ONLYA.bak 02/01/2013 00:00:00 > TransactionbackupA.trn 02/01/2013 01:00:00 > TransactionbackupB.trn 02/01/2013 02:00:00 > TransactionbackupC.trn 02/01/2013 03:00:00 > DifferntialbackupB.bak 03/01/2013 …

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

4
ข้อความค้นหาช้าสำหรับผู้ใช้บางราย
ฉันมีแบบสอบถามสองสามข้อที่เรียกจากแอปพลิเคชันเว็บ C # .NET ซึ่งรวดเร็วสำหรับฉันเสมอ (ฉันเป็นผู้ดูแลระบบภายใน SQL Server) แต่สำหรับกลุ่มผู้ใช้ (กลุ่มโดเมนที่มีสิทธิ์ที่จำเป็น) แบบสอบถามนั้นช้ามาก จุดที่มันหมดเวลาในแอปพลิเคชัน อะไรจะทำให้การค้นหาเดียวกันที่แน่นอนนั้นทำงานต่างกันสำหรับผู้ใช้ที่ต่างกัน ข้อมูลเพิ่มเติม: แบบสอบถามเป็นแบบอินไลน์ SQL ในรหัส C # ไม่ใช่ขั้นตอนการจัดเก็บ แอปใช้การรับรองความถูกต้องของโดเมนและทั้งผู้ใช้และตัวฉันเองเรียกใช้แบบสอบถามผ่านแอป ดูเหมือนว่าปัญหานี้เป็นแผนที่แตกต่างกันและมีการแคชหนึ่งครั้งดังนั้นจึงเป็นเหตุผลที่แตกต่างกันสำหรับผู้ใช้ที่ต่างกัน มีบางอย่างที่ส่งผลต่อแคชเพราะตอนนี้คิวรีช้าสำหรับฉันผ่านแอปและรวดเร็วใน SQL Server Management Studio

2
SQL Server 2012 Availability Group นั้นเป็น“ AlwaysON” หรือไม่
ในคลัสเตอร์ SQL Server แบบดั้งเดิมเมื่อเกิด failover ไคลเอนต์ทั้งหมดที่เชื่อมต่อกับ SQL Server ล้มเหลวเช่นการสูญเสียการเชื่อมต่อและลูกค้าแต่ละคนจะต้องสร้างการเชื่อมต่อใหม่ไปยังอินสแตนซ์คลัสเตอร์ล้มเหลว กลุ่มความพร้อมใช้งาน AlwaysON ลดปัญหานี้หรือไม่ failover ในกรณีที่กลุ่มความพร้อมใช้งาน SQL Server 2012 AlwaysON โปร่งใสให้กับลูกค้าที่เชื่อมต่อกับ SQL Server หรือไม่

3
ข้อผิดพลาดประสิทธิภาพการทำงานดัชนีดัชนี SQL Server 2008 datetime
เรากำลังใช้ SQL Server 2008 R2 และมีตารางที่มีขนาดใหญ่มาก (100M + แถว) ที่มีดัชนี id หลักและdatetimeคอลัมน์ที่มีดัชนีที่ไม่เป็นคลัสเตอร์ เราจะเห็นพฤติกรรมลูกค้า / เซิร์ฟเวอร์บางสูงผิดปกติขึ้นอยู่กับการใช้งานของนั้นorder byข้อโดยเฉพาะในคอลัมน์วันที่และเวลาการจัดทำดัชนี ฉันอ่านข้อความต่อไปนี้: /programming/1716798/sql-server-2008-ordering-by-datetime-is-too-slow แต่มีอะไรเกิดขึ้นกับไคลเอนต์ / เซิร์ฟเวอร์มากกว่าสิ่งที่เป็น เริ่มอธิบายที่นี่ หากเราเรียกใช้แบบสอบถามต่อไปนี้ (แก้ไขเพื่อป้องกันเนื้อหาบางส่วน): select * from [big table] where serial_number = [some number] order by test_date desc แบบสอบถามหมดเวลาทุกครั้ง ใน SQL Server Profiler แบบสอบถามที่ดำเนินการจะมีลักษณะเช่นนี้กับเซิร์ฟเวอร์: exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'select * …

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

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