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

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

2
คุณสามารถใช้ COUNT DISTINCT กับ OVER clause ได้หรือไม่?
ฉันพยายามปรับปรุงประสิทธิภาพของข้อความค้นหาต่อไปนี้: UPDATE [#TempTable] SET Received = r.Number FROM [#TempTable] INNER JOIN (SELECT AgentID, RuleID, COUNT(DISTINCT (GroupId)) Number FROM [#TempTable] WHERE Passed = 1 GROUP BY AgentID, RuleID ) r ON r.RuleID = [#TempTable].RuleID AND r.AgentID = [#TempTable].AgentID ขณะนี้ข้อมูลการทดสอบของฉันใช้เวลาประมาณหนึ่งนาที ฉันมีอินพุตจำนวน จำกัด ในการเปลี่ยนแปลงในโพรซีเดอร์ที่เก็บไว้ทั้งหมดที่มีการค้นหานี้ แต่ฉันสามารถให้พวกเขาแก้ไขเคียวรีนี้ได้ หรือเพิ่มดัชนี ฉันพยายามเพิ่มดัชนีต่อไปนี้: CREATE CLUSTERED INDEX ix_test ON #TempTable(AgentID, …

1
ทริกเกอร์ร่วมกับการทำธุรกรรม
สมมติว่าเรามีสถานการณ์ต่อไปนี้: เรามีตาราง (พูด Let 's Table_A), INSERTชมีทริกเกอร์บน งานทริกเกอร์คือการอัพเดตบางแถวtable_Btable_Aขึ้นอยู่กับค่าที่แทรกอยู่ใน ตอนนี้ทุกอย่างก็โอเคเมื่อเราแทรกแถวในตารางอย่างง่าย แต่แล้วสถานการณ์ที่เราแทรกข้อมูลผ่านการทำธุรกรรมล่ะ ทริกเกอร์จะรอจนกว่าคำสั่งการทำธุรกรรมทั้งหมดจะทำงานได้สำเร็จหรือจะถูกเรียกใช้ทันทีที่มันรับรู้ถึงการแทรก? หากทริกเกอร์ยิงทันทีเมื่อรับรู้การแทรกครั้งแรกจะเกิดอะไรขึ้นถ้าทรานแซคชันล้มเหลวในแถวสุดท้าย มีกลไกสำหรับสถานการณ์นั้นไหม

1
เปลี่ยนความยาวของ varchar บนตารางผลิตภัณฑ์สด
ฉันมีเซิร์ฟเวอร์ฐานข้อมูล MS SQL Server 2008 R2 อยู่ในขณะนี้ที่ใช้กับแอปที่ใช้งานจริง การปรับปรุงใหม่ให้กับแอพตอนนี้ต้องการvarchar(100)คอลัมน์ในตารางที่จะเพิ่มความยาว ความยาวของคอลัมน์ที่มีอยู่นี้ใน prod DB จะเพิ่มขึ้นได้หรือไม่โดยไม่กระทบต่อข้อมูลปัจจุบัน การเปลี่ยนแปลงนี้จะต้องเสร็จสิ้นในช่วงนอกเวลาทำการเพื่อหลีกเลี่ยงการหยุดให้บริการหรือไม่?

3
การจัดการภาวะพร้อมกันเมื่อใช้รูปแบบ SELECT-UPDATE
สมมติว่าคุณมีรหัสต่อไปนี้ (โปรดอย่าสนใจว่ามันแย่มาก): BEGIN TRAN; DECLARE @id int SELECT @id = id + 1 FROM TableA; UPDATE TableA SET id = @id; --TableA must have only one row, apparently! COMMIT TRAN; -- @id is returned to the client or used somewhere else ในสายตาของฉันนี่ไม่ใช่การจัดการภาวะพร้อมกันอย่างเหมาะสม เพียงเพราะคุณมีการทำธุรกรรมไม่ได้หมายความว่าคนอื่นจะไม่อ่านค่าเดียวกันกับที่คุณทำก่อนที่คุณจะได้รับการปรับปรุงของคุณ ตอนนี้ปล่อยให้รหัสตามที่เป็นอยู่ (ฉันตระหนักดีว่านี่คือการจัดการที่ดีกว่าเป็นคำสั่งเดียวหรือดียิ่งขึ้นโดยใช้คอลัมน์ autoincrement / เอกลักษณ์) สิ่งที่แน่ใจว่าวิธีที่จะทำให้มันจัดการพร้อมกันอย่างถูกต้องและป้องกันเงื่อนไขการแข่งขัน ค่า …

1
บทบาทการบริการรายงานและแอปพลิเคชัน
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา โปสเตอร์แรกผู้สิงสู่มานานที่นี่ วิธีที่ดีที่สุดในการเปิดใช้งานบทบาทแอปพลิเคชันในรายงานคืออะไร ฉันได้ลองสิ่งที่แตกต่างและวิธีเดียวที่ทำงานคือฝังการเรียกไปยังบทบาทของแอปพลิเคชันเช่น: - EXEC sp_setapprole 'REPORTZ', 's3cr3t'; select * from mytable where ID < 10000 ในชุดข้อมูล มันใช้งานได้ ... แต่ไม่ใช่ตามความชอบของฉัน (แน่นอนว่าไม่ใช่ในรูปแบบที่ฉันต้องการนำไปใช้ในสภาพแวดล้อมการผลิต) ฉันต้องการถ้าฉันสามารถ 'จี้' หรือ 'ฉีด' บรรทัดการเปิดใช้งานบทบาทแอปพลิเคชันที่รันไทม์อย่างใดอย่างหนึ่งผ่านชุดประกอบที่กำหนดเองหรืออาจเป็น 'เบ็ดเซิร์ฟเวอร์' ในบริการรายงาน (ในทั้งสองกรณีฉันไม่รู้ว่า ) ชื่นชมมากสำหรับเวลาของคุณ + ความใส่ใจ YS
25 sql-server  ssrs  role 

3
ขนาดไฟล์หน้าที่แนะนำสำหรับ SQL 2008R2 บน Windows 2008R2
บทความของ Microsoft นี้ - วิธีการกำหนดขนาดหน้าแฟ้มที่เหมาะสมสำหรับ Windows Server 2008 และ Windows 2008 R2รุ่น 64 บิตให้คำแนะนำสำหรับการคำนวณขนาดหน้าไฟล์สำหรับ 64 บิต Windows 2008 และ Windows 2008R2 ไม่ต้องสงสัยเลยว่าทำงานได้ดีสำหรับเซิร์ฟเวอร์ที่ใช้งานทั่วไป ฉันสงสัยว่าคำแนะนำสำหรับ SQL Server 2008R2 ที่ทำงานบน Windows 2008 / R2 64 บิตคืออะไร ฉันคิดว่าเราต้องการข้อมูลหน่วยความจำเพียงเล็กน้อยในการกดปุ่มไฟล์หน้ามิฉะนั้น SQL อาจกดดิสก์สองครั้งเพื่อหาข้อมูล SQL Server อนุญาตให้ข้อมูลในหน่วยความจำตีไฟล์หน้าได้หรือไม่ ฉันได้รับคำแนะนำจากSQL Server 2008 R2 Books Online แล้วแต่ยังไม่พบการใช้ไฟล์หน้าใด ๆ นี่คือสถานการณ์การใช้งานที่อาจเกิดขึ้น: เมื่อกำหนดเซิร์ฟเวอร์จริงที่มี RAM …

6
วิธีเพิ่ม sysadmin ให้กับผู้ใช้ใน SQL Server 2008 เมื่อไม่มีบัญชี sysadmin
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันมีอินสแตนซ์ของ SQL Server 2008 ทำงานอยู่ น่าเสียดายในระหว่างการทดสอบฉันยกเลิกการเลือกสิทธิ์ดูแลระบบสำหรับการเข้าสู่ระบบของฉันและตอนนี้ไม่สามารถอ่านได้ (เพราะฉันไม่มีสิทธิ์ดูแลระบบ) ไม่มีบัญชีดูแลระบบอื่น ๆ สำหรับอินสแตนซ์ยกเว้น SA ฉันถูกตั้งค่าสำหรับการพิสูจน์ตัวจริงของ Windows ดังนั้นฉันจึงแฮ็ค LoginMode ในรีจิสตรีถึง 2 ดังนั้นฉันจึงสามารถเข้าสู่ระบบในฐานะ SA โดยใช้การพิสูจน์ตัวตนของ Sql นี่เป็นการตั้งค่าโหมดล็อกอินเป็นแบบผสมอย่างไรก็ตามผู้ใช้ SA ถูกปิดใช้งานโดยค่าเริ่มต้นและฉันไม่สามารถเปิดใช้งานได้อีกครั้งเพราะฉันไม่มีสิทธิ์ดูแลระบบ ฉันจะเปิดใช้งานการเข้าสู่ระบบ SA เพื่อให้ฉันสามารถเข้าสู่ระบบและโอนสิทธิดูแลระบบไปยังบัญชีปกติของฉันได้อย่างไร มีการตั้งค่ารีจิสทรีสำหรับสิ่งนี้ด้วยหรือเก็บไว้ในฐานข้อมูลหลักหรือไม่

3
ฉันควรเลือกชุดเปรียบเทียบใดสำหรับเว็บไซต์ภาษา muiti
การเปรียบเทียบมีผลกับความเร็วการสืบค้นหรือไม่? ขนาดของตารางเปลี่ยนไปตามการเปรียบเทียบหรือไม่? หากฉันต้องการสร้างเว็บไซต์ที่ต้องรองรับภาษาที่เป็นไปได้ทั้งหมด (ลองทำเช่น Google) ซึ่งจะเป็นการเปรียบเทียบที่แนะนำหรือไม่ ฉันจะต้องเก็บตัวอักษรเช่น日本語การค้นหาของฉันในเว็บไซต์จะต้องส่งคืนsomethingค่าsóméthíngอินพุตนั้นจะต้องตรงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ฉันจะรู้ได้อย่างไรว่าทางเลือกใดที่ดีที่สุด? การเปรียบเทียบชุดไหนที่เหมาะกับกรณีนี้มากที่สุด

3
ฉันจะยกเลิกคำขอล็อคแอพใน SQL Server ได้อย่างไร
กระบวนการsp_getapplock ที่เก็บไว้มีค่าส่งคืนต่อไปนี้: 0: การล็อกได้รับการอนุญาตให้สำเร็จพร้อมกัน 1: อนุญาตให้ล็อกสำเร็จหลังจากรอการล็อกอื่นที่เข้ากันไม่ได้ -1: คำขอล็อกหมดเวลา -2: คำขอล็อคถูกยกเลิก -3: คำขอล็อคถูกเลือกให้เป็นเหยื่อการหยุดชะงัก -999: ระบุการตรวจสอบความถูกต้องของพารามิเตอร์หรือข้อผิดพลาดการโทรอื่น ๆ ฉันกำลังเขียน wrapper สำหรับการโทรsp_getapplockใน data access layer ของเราและฉันต้องการทราบว่าภายใต้สถานการณ์ใด -2 ซึ่งสามารถส่งคืนได้เพื่อที่ฉันจะสามารถโยนข้อยกเว้นเชิงอธิบายและเป็นประโยชน์ เห็นได้ชัดว่าค่าส่งคืนของ -1 และ -3 หมายถึงอะไรและฉันสามารถสร้างเงื่อนไขการทดสอบที่ทำให้ค่าเหล่านั้นถูกส่งคืนได้อย่างง่ายดาย ฉันจะจัดการเพื่อรับค่าตอบแทนเป็น -2 ได้อย่างไร

3
คีย์ธรรมชาติให้ประสิทธิภาพที่สูงขึ้นหรือต่ำลงใน SQL Server มากกว่าปุ่มจำนวนเต็มตัวแทน?
ฉันเป็นแฟนของกุญแจตัวแทน มีความเสี่ยงที่การค้นพบของฉันจะยืนยันลำเอียง คำถามมากมายที่ฉันเห็นทั้งที่นี่และที่http://stackoverflow.comใช้คีย์ธรรมชาติแทนคีย์ตัวแทนโดยยึดตามIDENTITY()ค่า พื้นหลังของฉันในระบบคอมพิวเตอร์บอกให้ฉันดำเนินการเปรียบเทียบใด ๆ กับจำนวนเต็มจะเร็วกว่าการเปรียบเทียบสตริง ความคิดเห็นนี้ทำให้ฉันถามความเชื่อของฉันดังนั้นฉันคิดว่าฉันจะสร้างระบบเพื่อตรวจสอบวิทยานิพนธ์ของฉันว่าจำนวนเต็มเร็วกว่าสตริงเพื่อใช้เป็นกุญแจใน SQL Server เนื่องจากมีความแตกต่างที่สังเกตได้น้อยมากในชุดข้อมูลขนาดเล็กฉันจึงนึกถึงการตั้งค่าตารางสองตารางทันทีที่ตารางหลักมี 1,000,000 แถวและตารางรองมี 10 แถวสำหรับแต่ละแถวในตารางหลักรวม 10,000,000 แถวใน ตารางที่สอง ข้อสมมติฐานของการทดสอบของฉันคือการสร้างตารางสองชุดเช่นนี้ชุดหนึ่งใช้คีย์ธรรมชาติและอีกชุดหนึ่งใช้คีย์จำนวนเต็มและเรียกใช้การทดสอบกำหนดเวลากับคำถามง่ายๆเช่น: SELECT * FROM Table1 INNER JOIN Table2 ON Table1.Key = Table2.Key; ต่อไปนี้เป็นรหัสที่ฉันสร้างเป็นเตียงทดสอบ: USE Master; IF (SELECT COUNT(database_id) FROM sys.databases d WHERE d.name = 'NaturalKeyTest') = 1 BEGIN ALTER DATABASE NaturalKeyTest SET SINGLE_USER …

2
SQL Server - อนุญาตให้สิทธิ์กับทั้ง schema กับวัตถุ?
ฉันเป็นมิตรกับโลกของการจัดการสิทธิ์ในฐานข้อมูลใน SQL Sever ขอยกตัวอย่างง่ายๆ สมมติว่าบัญชี 'admin' เป็นเจ้าของ schemas A, B และ C มีบัญชี 'minion' อีกบัญชีหนึ่งที่คุณต้องการให้มีสิทธิ์อย่างเต็มที่ (อัปเดต / ลบ / แทรก / เลือก / แก้ไข) บนวัตถุใด ๆ (ตาราง / มุมมอง) ที่สร้างขึ้นภายใต้สคีมา A, B และ C เป็นไปได้ไหม หรือคุณต้องใช้คำสั่งให้สิทธิ์ทุกครั้งที่คุณเพิ่มตาราง / มุมมองภายใต้สคีมาเหล่านี้หรือไม่? (ดูเหมือนฉันจะโง่ไปหน่อย)

2
วิธีแทรกหรืออัปเดตโดยใช้ข้อความค้นหาเดียว
ฉันมีตารางทดสอบที่มีคอลัมน์ id ซึ่งเป็นคีย์หลักและเพิ่มขึ้นอัตโนมัติและชื่อ ฉันต้องการที่จะแทรกบันทึกใหม่ถ้า annd เฉพาะในกรณีที่ไม่มีบันทึกตัวอย่างเช่น อินพุตคือ id = 30122 และ name = john หากมีการบันทึกที่มี id 30122 ฉันได้อัปเดตคอลัมน์ชื่อเป็น john หากไม่มีการบันทึกฉันจะใส่บันทึกใหม่ ฉันสามารถทำได้โดยใช้ 2 แบบสอบถามเช่น select * from test where id=30122 หากมีบางบันทึกฉันสามารถใช้งานได้ update test set name='john' where id=3012 หรือถ้ามันไม่มีบันทึกฉันก็สามารถใช้งานได้ insert into test(name) values('john') แต่ฉันต้องการใช้ข้อความค้นหาเดียว? ใครสามารถบอกได้ถ้าเป็นไปได้?

1
(NOLOCK) กับ NOLOCK
ฉันกำลังตรวจสอบการบล็อกบางอย่างเมื่อฉันเห็นข้อความค้นหาที่มีลักษณะดังนี้: SELECT SomeField FROM SomeTable NOLOCK ฉันเห็นNOLOCKและอยากรู้ว่ามันจะบล็อกข้อความค้นหาอื่น ๆ ได้อย่างไรในกรณีDELETEนี้ ฉันลองดูที่ล็อคโดยใช้sp_lockและนี่คือสิ่งที่ฉันเห็น: DB S GRANT TAB IS GRANT PAG S GRANT ตอนนี้ความเข้าใจของฉันคือที่NOLOCKควรจะใช้ล็อค Schema-Stability เท่านั้นทำไมมันจึงคว้าล็อค IS? ความอยากรู้ของฉันป่องๆ ฉันดู BOL และเห็นว่ามีสองวิธีในการใช้WITH (NOLOCK)และเลิกใช้แล้ว(NOLOCK)ดังนั้นฉันจึงตัดสินใจลองใช้ ฉันเรียกใช้แบบสอบถามต่อไปนี้ตามด้วยการเรียกใช้sp_lock: SELECT SomeField FROM SomeTable WITH (NOLOCK) DB S GRANT TAB Sch-S GRANT SELECT SomeField FROM SomeTable (NOLOCK) DB S GRANT TAB …

1
ฟังก์ชันการซ้อนฟังก์ชันสเกลาร์อ้างอิงตนเองด้วยตนเองเกินเมื่อเพิ่มการเลือก
วัตถุประสงค์ เมื่อพยายามสร้างตัวอย่างทดสอบของฟังก์ชันการอ้างอิงตนเองรุ่นหนึ่งล้มเหลวในขณะที่อีกรุ่นหนึ่งประสบความสำเร็จ ความแตกต่างเพียงอย่างเดียวคือการเพิ่มSELECTให้กับส่วนของฟังก์ชันทำให้แผนการดำเนินการแตกต่างกันสำหรับทั้งสอง ฟังก์ชั่นที่ใช้งานได้ CREATE FUNCTION dbo.test5(@i int) RETURNS INT AS BEGIN RETURN( SELECT TOP 1 CASE WHEN @i = 1 THEN 1 WHEN @i = 2 THEN 2 WHEN @i = 3 THEN dbo.test5(1) + dbo.test5(2) END ) END; กำลังเรียกใช้ฟังก์ชัน SELECT dbo.test5(3); ผลตอบแทน (No column name) 3 ฟังก์ชั่นที่ไม่ทำงาน CREATE …

3
SQL Server ล้างแคชแผนและสถิติการดำเนินการเป็นระยะ
หลังจากอัปเกรด SQL Server 2014 ถึง 2016 เซิร์ฟเวอร์จะทำการรีเซ็ตแผนการดำเนินการและdm*มุมมองแคช(เช่นdm_exec_query_stats) เป็นต้นทุก ๆ สองสามชั่วโมง ราวกับว่ามีคนดำเนินการDBCC FREEPROCCACHEและDBCC DROPCLEANBUFFERSด้วยตนเอง (ยกเว้นไม่มีใครทำมันจะเกิดขึ้นโดยอัตโนมัติ) ฐานข้อมูลเดียวกันทำงานได้ดีบน SQL Server 2014 และ Windows Server 2012 ทุกอย่างดำเนินไปทางใต้หลังจากย้ายไปยัง SQL Server 2016 (และ Windows Server 2016) สิ่งที่ผมตรวจสอบ: ฐานข้อมูลไม่ได้มี "รถยนต์ใกล้ธง" เซิร์ฟเวอร์ SQL ถูกad hoc optimizedตั้งค่าเป็นtrue(ฉันคิดว่ามันจะช่วยไม่ได้) "ที่เก็บแบบสอบถาม" คือ "ปิด" เซิร์ฟเวอร์มีหน่วยความจำ 16 GB ไม่มีประโยชน์ใน "บันทึกของเซิร์ฟเวอร์ SQL" เพียงแค่ข้อความสำรองรายสัปดาห์ ... ฉันตรวจสอบบทความนี้ด้วยhttps://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-set-options …

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