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

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

4
วิธีการเลือกแถวแรกจากการเข้าร่วมที่ส่งกลับหลายแถวในคีย์หลัก
สิ่งนี้เกี่ยวข้องกับคำถามนี้: การรวมผลลัพธ์หลาย ๆ ตารางเข้าด้วยกันเป็นแถว ฉันมีสองตารางที่ฉันเข้าร่วม พวกเขาแบ่งปันกุญแจ ตารางบุคคลมีชื่อหนึ่งชื่อต่อคีย์หลัก แต่ตารางอีเมลนั้นมีหลายอีเมลต่อ personId ฉันต้องการแสดงอีเมลแรกต่อคนเท่านั้น ปัจจุบันฉันได้รับหลายแถวต่อคนเพราะพวกเขามีอีเมลหลายฉบับ ฉันใช้ SQL-Server 2005 แก้ไข: นี่คือ T-SQL อีเมลแรกคือแถวอีเมลแรกต่อคน แก้ไข 2: อีเมลแรกที่ฉันเห็นมันจะเป็นแถวอีเมลแรกที่แสดงในการเข้าร่วมเมื่อ SQL ทำงานผ่านการสืบค้น ฉันไม่สำคัญว่าจะแสดงอีเมลใด มีเพียงอีเมลเดียวเท่านั้นที่ปรากฏขึ้น ฉันหวังว่ามันจะชัดเจนยิ่งขึ้น Table1: Person Table2: Email Select Person.PersonName, Email.Email From person left join on Person.ID=Email.PersonId;

1
เหตุใด COUNT หลายรายการจึงเร็วกว่าหนึ่ง SUM ด้วย CASE
ฉันอยากรู้ว่าวิธีใดในสองวิธีต่อไปนี้เร็วกว่า: 1) สามCOUNT: SELECT Approved = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Approved'), Valid = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Valid'), Reject = (SELECT COUNT(*) FROM dbo.Claims d WHERE d.Status = 'Reject') 2) SUMด้วยFROM--clause: SELECT Approved = SUM(CASE WHEN Status = 'Approved' THEN 1 ELSE …

1
ฉันสามารถสอบถามไฟล์ที่คั่นด้วยแท็บจาก SSMS ได้หรือไม่
เป็นไปได้หรือไม่ที่จะสืบค้นไฟล์ที่คั่นด้วยแท็บจาก Sql Server Management Studio เพื่อดูข้อมูลโดยไม่บันทึกที่ใดก็ได้ ฉันรู้ว่าคุณสามารถBULK INSERTจากไฟล์ที่คั่นด้วยแท็บโดยใช้สิ่งที่ชอบ: BULK INSERT SomeTable FROM 'MyFile.txt' WITH ( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n'); อย่างไรก็ตามคุณต้องทราบคอลัมน์ล่วงหน้าและสร้างตารางเพื่อเก็บข้อมูล ฉันรู้ว่าคุณสามารถสืบค้นไฟล์ประเภทอื่นเช่น CSV หรือ Excel ได้โดยไม่ต้องกำหนดคอลัมน์ล่วงหน้าโดยใช้OPENROWSETและไดรเวอร์ Excel เช่น: -- Query CSV SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Text;Database=\\Server\Folder\;HDR=Yes;', 'SELECT * FROM MyFile.csv') -- Query Excel SELECT * FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0;Database=MyFile.xls', …

4
รวมคอลัมน์จากหลายแถวเป็นแถวเดียว
ฉันได้customer_commentsแบ่งออกเป็นหลายแถวเนื่องจากการออกแบบฐานข้อมูลและสำหรับรายงานที่ฉันต้องรวมcommentsจากแต่ละที่ไม่ซ้ำกันidเป็นหนึ่งแถว ก่อนหน้านี้ฉันเคยลองบางสิ่งบางอย่างที่ทำงานกับรายการที่มีการคั่นจาก SELECT clause และเคล็ดลับCOALESCEแต่ฉันจำไม่ได้และต้องไม่บันทึกไว้ ฉันไม่สามารถทำให้มันทำงานได้ในกรณีนี้ดูเหมือนว่าจะทำงานในแถวเดียวเท่านั้น ข้อมูลมีลักษณะดังนี้: id row_num customer_code comments ----------------------------------- 1 1 Dilbert Hard 1 2 Dilbert Worker 2 1 Wally Lazy ผลลัพธ์ของฉันต้องมีลักษณะเช่นนี้: id customer_code comments ------------------------------ 1 Dilbert Hard Worker 2 Wally Lazy ดังนั้นสำหรับแต่ละrow_numผลลัพธ์จะมีแถวเดียวเท่านั้น row_numความคิดเห็นที่ควรจะรวมอยู่ในคำสั่งของ SELECTเคล็ดลับที่ถูกเชื่อมโยงข้างต้นนั้นใช้เพื่อให้ได้ค่าทั้งหมดสำหรับการสืบค้นที่เฉพาะเจาะจงเป็นหนึ่งแถว แต่ฉันไม่สามารถหาวิธีที่จะทำให้การทำงานเป็นส่วนหนึ่งของSELECTคำสั่งที่แยกแถวเหล่านี้ออกทั้งหมด ข้อความค้นหาของฉันต้องผ่านทั้งตารางด้วยตัวเองและออกแถวเหล่านี้ ฉันไม่ได้รวมมันไว้ในหลายคอลัมน์หนึ่งแถวสำหรับแต่ละแถวดังนั้นจึงPIVOTดูเหมือนไม่เกี่ยวข้อง

2
เหตุใดแบบสอบถามจึงทำงานช้าลงในกระบวนงานที่เก็บไว้กว่าในหน้าต่างแบบสอบถาม
ฉันมีแบบสอบถามที่ซับซ้อนซึ่งทำงานใน 2 วินาทีในหน้าต่างแบบสอบถาม แต่ประมาณ 5 นาทีเป็นกระบวนงานที่เก็บไว้ เหตุใดจึงใช้เวลานานกว่าจึงจะเรียกใช้เป็นกระบวนงานที่เก็บไว้ได้ นี่คือสิ่งที่แบบสอบถามของฉันดูเหมือน ใช้ชุดระเบียนเฉพาะ (ระบุโดย@idและ@createdDate) และกรอบเวลาที่เฉพาะเจาะจง (1 ปีเริ่มต้นจาก@startDate) และส่งกลับรายการสรุปของตัวอักษรที่ส่งและการชำระเงินโดยประมาณที่ได้รับเป็นผลมาจากตัวอักษรเหล่านั้น CREATE PROCEDURE MyStoredProcedure @id int, @createdDate varchar(20), @startDate varchar(20) AS SET NOCOUNT ON -- Get the number of records * .7 -- Only want to return records containing letters that were sent on 70% or more …

6
รายการตรวจสอบ SQL Server
การติดตามจากคำถามอื่นของฉันฉันต้องการเริ่มคิดเกี่ยวกับสิ่งที่ฉันควรดูในฐานรายวัน / รายสัปดาห์ / รายเดือนในแง่ของการแจ้งเตือน ฉันหวังว่าจะสามารถเห็นปัญหามาก่อนที่จะเกิดขึ้น (นั่นคือแผน) ... จนถึงตอนนี้ฉันได้เริ่มเก็บสคริปต์สำหรับต่อไปนี้ (ไม่มีคำสั่ง): ประจำวัน ตรวจสอบความพร้อมของระบบ (ในกรณีที่ฉันต้องตรวจสอบอะไรเป็น DBA) ตรวจสอบข้อมูลสำรองล่าสุด ตรวจสอบการสำรองข้อมูลบันทึกธุรกรรม ตรวจสอบสถานะของงาน SQL ตรวจสอบการใช้งาน CPU โดยเฉลี่ยในช่วง 24 ชั่วโมงที่ผ่านมา (หรือ 1140 นาที) รายสัปดาห์ ตรวจสอบประวัติการสำรองข้อมูลของ MSDB ตรวจสอบเพื่อดูว่าเมื่อครั้งที่ CheckDB ทำงานครั้งสุดท้าย ตรวจสอบดัชนีการแตกแฟรกเมนต์ ตรวจสอบสถิติดัชนี (อ่าน vs เขียน ฯลฯ ) ตรวจสอบคอขวด IO รายเดือน ตรวจสอบดัชนีที่ขาดหายไป ตรวจสอบดัชนีที่ไม่ได้ใช้อีกต่อไป ข้อเสนอแนะอื่น ๆ ? (ฉันใหม่กับ DBA ดังนั้นยินดีให้ความช่วยเหลือ …

3
เหตุใดคำสั่ง ALTER TABLE แบบธรรมดาจึงใช้เวลานานในตารางที่มีดัชนีข้อความแบบเต็ม?
ฉันมีตารางชื่อมูลค่าขนาดใหญ่ (~ 67 ล้านแถว) ที่มีการจัดทำดัชนีข้อความแบบเต็มในDataValueคอลัมน์ ถ้าฉันพยายามเรียกใช้คำสั่งต่อไปนี้: ALTER TABLE VisitorData ADD NumericValue bit DEFAULT 0 NOT NULL; มันทำงานเป็นเวลา 1 ชั่วโมง 10 นาทีและยังไม่เสร็จสมบูรณ์ในVisitorDataตารางที่มีประมาณ 67 ล้านแถว ทำไมการดำเนินการนี้ใช้เวลานานและไม่เสร็จสมบูรณ์ ฉันจะทำอะไรได้บ้าง นี่คือรายละเอียดเพิ่มเติมเกี่ยวกับตาราง: CREATE TABLE [dbo].[VisitorData]( [VisitorID] [int] NOT NULL, [DataName] [varchar](80) NOT NULL, [DataValue] [nvarchar](3800) NOT NULL, [EncryptedDataValue] [varbinary](max) NULL, [VisitorDataID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT …

2
ค้นหาเซสชันที่กำลังถือตารางชั่วคราว
เรามีฐานข้อมูล SQL Server 2005 ฐานข้อมูลชั่วคราวเต็ม โดยไปที่ Studio จัดการเซิร์ฟเวอร์ SQL ฉันสามารถดูตารางชั่วคราวทั้งหมดใน tempdb เป็นไปได้หรือไม่ที่จะบอกได้ว่าเซสชันใดกำลังถือตารางอุณหภูมิใดอยู่ เป็นการดีที่แบบสอบถามซึ่งจะแสดงรายการตารางอุณหภูมิที่ใช้โดยแต่ละเซสชั่น ขอบคุณ

5
ใน SQL Server จะมีวิธีในการกำหนดค่าของพารามิเตอร์ที่ส่งผ่านไปยังกระบวนงานที่เก็บไว้
วิธีหนึ่งในการกำหนดโพรซีเดอร์ที่เก็บไว้ซึ่งเรียกใช้โพรซีเดอร์คือใช้วิธี "การจัดการแบบไดนามิก" เช่น: SELECT sqlText.Text, req.* FROM sys.dm_exec_requests req OUTER APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqltext อย่างไรก็ตามสิ่งนี้จะแสดงเฉพาะข้อความของคำสั่งสร้างของโพรซีเดอร์ที่เก็บไว้ เช่น: CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id เป็นการดีที่ฉันต้องการดูว่าพารามิเตอร์สำหรับกระบวนการทำงานที่ทำให้มันทำงานนานมากสำหรับชุดของพารามิเตอร์ที่ละเมิด มีวิธีทำเช่นนั้นหรือไม่? (ในคำถามนี้ Aaron Bertrandกล่าวถึงInputBuffer DBCCแต่ฉันไม่คิดว่ามันเหมาะสมสำหรับปัญหานี้)

1
การเชื่อมต่อเซิร์ฟเวอร์ ODBC แหล่งข้อมูล SQL Server - การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้
ฉันย้ายฐานข้อมูลของฉันจาก SQL 2005 ไปยังเซิร์ฟเวอร์ที่มี SQL 2008 ตอนนี้ฉันกำลังพยายามสร้างแหล่งข้อมูล ODBC ฉันใช้ "ด้วยการรับรองความถูกต้องของเซิร์ฟเวอร์ SQL โดยใช้รหัสเข้าสู่ระบบและรหัสผ่านที่ป้อนโดยผู้ใช้" และได้เข้าสู่ระบบและรหัสผ่านของฉัน การเข้าสู่ระบบจะมองเห็นได้ใน SQL Server Management Studio ภายใต้ความปลอดภัย -> เข้าสู่ระบบ การเข้าสู่ระบบยังมีคุณสมบัติที่แน่นอนของการเข้าสู่ระบบเดียวกันในเซิร์ฟเวอร์เก่าของฉัน เมื่อฉันกดปุ่มถัดไปหลังจากป้อนชื่อผู้ใช้และรหัสผ่านฉันจะได้รับ: Connection failed: SQLState: '28000' SQL Server Error: 18456 [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'myUser'. หลังจากอ่านสิ่งนี้: http://support.microsoft.com/kb/555332ฉันรู้ว่าคุณสมบัติเซิร์ฟเวอร์ถูกตั้งค่าเป็น "Windows Authentication Mode" เท่านั้น แต่แม้หลังจากเปลี่ยนเป็น "SQL Server และ …

3
ปฏิเสธการเข้าถึง schema ของข้อมูลใน SQL Server
ฉันกำลังมองหาวิธีที่ดีที่สุดในการปิดการเข้าถึงsys.tables/ Information Schemaสำหรับผู้ใช้ / กลุ่มใน SQL Server ฉันพบกระทู้นี้ตั้งแต่ปี 2008 มันแสดงวิธีการปฏิเสธการเข้าถึงโดย[sys].[something]ชอบ: DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole GO แต่ไม่มีวิธีการปิดการเข้าถึงบนInformation Schema: DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole ดูเหมือนว่าจะไม่ทำงาน ฉันจะปิดการใช้งานการเข้าถึง information_schema ได้อย่างไร …

6
การสำรองฐานข้อมูลทั้งหมดใน SQL Server
ฉันมีเซิร์ฟเวอร์ฐานข้อมูล Microsoft SQL Server 2005 ในเซิร์ฟเวอร์ DB ฉันมีฐานข้อมูลผู้ใช้ประมาณ 250 คน ฉันต้องสำรองฐานข้อมูลเหล่านี้ทั้งหมด เนื่องจากการสำรองข้อมูลด้วยตนเองใช้เวลานานฉันกำลังมองหาสคริปต์ชุดงานหรือสคริปต์ฐานข้อมูลซึ่งจะสำรองข้อมูลของฐานข้อมูล 250 ทั้งหมดโดยอัตโนมัติ มีใครช่วยได้บ้างไหม?

4
การแบ่งพาร์ติชันตารางสำหรับเก็บข้อมูล
สถานการณ์: สองฐานข้อมูล: DB_A และ DB_Archive กับหนึ่งตารางใหญ่มากที่เรียกว่า tableA ทุกวันบันทึกที่เก่ากว่า 60 วันจะถูกลบออกจาก DB_A และย้ายไปที่ DB_Archive เป็นหลักเพื่อแยกสิ่ง "แยก" ออกเนื่องจาก tableA ถูกสอบถามอย่างหนักใน DB_A สำหรับบันทึกของ 2 เดือนที่ผ่านมา ฉันต้องการกำจัดกระบวนการนี้เพราะมันช้าและสิ้นเปลืองทรัพยากรจำนวนมาก ฉันกำลังคิดที่จะนำตารางพาร์ติชั่นไปใช้บน DB_A ด้วยฟังก์ชั่นพาร์ติชั่นในคอลัมน์วันที่และเก็บบันทึกทั้งหมด <2 เดือนในหนึ่งพาร์ติชั่นและทุกเรคคอร์ด> 2 เดือนในอีกพาร์ติชันหนึ่ง คำถามของฉัน: สถานการณ์นี้จะทำงานเป็นอย่างไรถ้าฉันมีฐานข้อมูล 2 แบบ ถ้าฉันค้นหา tableA สำหรับบันทึก> getdate () - 30 จะอ่านพาร์ติชันเก็บถาวรหรือไม่ ฉันคิดว่าฉันต้องแบ่งดัชนีด้วยใช่มั้ย ฉันจะจัดการกับความจริงที่ว่าในวันพรุ่งนี้ฟังก์ชั่นพาร์ทิชันของฉันจะ "เปลี่ยน" ฉันหมายความว่าถ้าฉันสร้างฟังก์ชั่นวันนี้ (วันที่ 2 กรกฎาคมช่วงของมันจะเป็นวันที่ 2 …

3
ประสิทธิภาพของ SQL Server ลดลงอย่างฉับพลัน
ฉันมี SQL Server 2005 ที่คาดเดาไม่ได้ว่าล่าช้าและฉันเกาหัวว่าทำไม แบบสอบถามที่ดำเนินการในไม่กี่วินาทีกำลังเปลี่ยนแผนและใช้เวลาไม่กี่นาที (สละเวลาในการสแกนเต็มตารางหรือสปูลดัชนี) ตอนนี้สิ่งแรกและชัดเจนที่สุดคือสถิติล้าสมัยทำให้เครื่องมือเพิ่มประสิทธิภาพสับสน แต่ฉันเชื่อว่านี่ไม่ใช่กรณี - ประการแรกเนื่องจากข้อมูลพื้นฐานไม่เปลี่ยนแปลงอย่างมีนัยสำคัญ (เช่นการเพิ่มข้อมูลหนึ่งวันบนข้อมูลหนึ่งปี มีอยู่ในตารางแล้ว) และอันดับที่สองเนื่องจากสถิติการสร้างอัตโนมัติและสถิติการอัปเดตอัตโนมัติเป็นจริงทั้งคู่ แต่เพิ่มประสิทธิภาพอยู่ในการสับสน; การรัน SQL ในโปรแกรมช่วยแนะนำการปรับแต่งให้CREATE STATISTICSคำสั่งหลายคอลัมน์มากมายซึ่งดูเหมือนว่าจะแก้ไขได้ ความคิดใดของกลยุทธ์ที่ฉันสามารถใช้เพื่อเข้าใกล้รากสาเหตุนี้ ทำไมสถิติ "ปกติ" ไม่เพียงพอ?

2
ฉันจะเปลี่ยนชื่ออินสแตนซ์ใน MS SQL 2005 โดยไม่ต้องติดตั้งอินสแตนซ์ใหม่ได้อย่างไร
ฉันมีอินสแตนซ์ที่ไม่ได้มีอะไรเลยติดตั้งอยู่ (มันมีไว้สำหรับโครงการหนึ่ง แต่ไม่เคยทำบนเซิร์ฟเวอร์นี้จริงโครงการทำซ้ำในเซิร์ฟเวอร์อื่น) ดังนั้นเนื่องจากฉันมีอินสแตนซ์ ฉันต้องการเปลี่ยนชื่อ สามารถทำได้หรือไม่ ฉันจะทำอย่างไร การสอบสวนเพิ่มเติม (googling) บอกว่ามันเป็นไปไม่ได้จริงๆ การให้คำปรึกษาเพิ่มเติมกับเพื่อนร่วมงานของฉันบอกว่าฉันอาจติดตั้งอินสแตนซ์ 2k8 และดำเนินการต่อ

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