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

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

4
กฎที่แข็งและเร็วสำหรับการรวมคอลัมน์ในดัชนี
มีกฎใด ๆ ที่ยากและรวดเร็วในการตัดสินใจว่าควรจะใส่คอลัมน์ใดและเรียงตามลำดับในรวมในดัชนีที่ไม่ทำคลัสเตอร์ ฉันเพิ่งอ่านบทความนี้https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index และฉันพบว่าสำหรับแบบสอบถามต่อไปนี้: SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 โปสเตอร์แนะนำให้สร้างดัชนีแบบนี้: CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) ที่นี่คำถามของฉันมาทำไมเราไม่สามารถสร้างดัชนีเช่นนี้ CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, DepartmentID, LastName) หรือ CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, LastName) INCLUDE (DepartmentID) และสิ่งใดที่ทำให้ผู้โพสต์ตัดสินใจที่จะเก็บคอลัมน์นามสกุลไว้ด้วย ทำไมไม่คอลัมน์อื่น ๆ และวิธีการตัดสินใจในลำดับที่เราควรเก็บคอลัมน์ที่มี?

2
SQL Server เลือกผลลัพธ์ที่คาดเดาไม่ได้ (ข้อผิดพลาด dbms?)
ด้านล่างเป็นตัวอย่างง่ายๆที่ให้ผลลัพธ์ที่แปลกประหลาดซึ่งไม่สามารถคาดเดาได้และเราไม่สามารถอธิบายได้ในทีมของเรา เรากำลังทำอะไรผิดพลาดหรือเป็นข้อผิดพลาดของ SQL Server หรือไม่ หลังจากการตรวจสอบบางอย่างเราได้ลดพื้นที่การค้นหาเป็นสหภาพประโยคในแบบสอบถามย่อยซึ่งเลือกหนึ่งระเบียนจากตาราง "ผู้ชาย" มันทำงานได้ตามที่คาดหวังใน SQL Server 2000 (ส่งคืน 12 แถว) แต่ในปี 2008 และ 2012 จะส่งคืนเพียงแถวเดียว create table dual (dummy int) insert into dual values (0) create table men ( man_id int, wife_id int ) -- there are 12 men, 6 married insert into men values (1, …

8
การเขียนผลลัพธ์ที่เลือกไปยังไฟล์ csv
เราจำเป็นต้องเขียนผลลัพธ์การสืบค้น SELECT ลงในไฟล์ csv จะใช้ T-SQL ใน SQL Server 2008 r2 ได้อย่างไร ฉันรู้ว่ามันสามารถทำได้ใน SSIS แต่ด้วยเหตุผลบางอย่างเราไม่มีตัวเลือกนี้ ฉันพยายามใช้ proc ที่แนะนำในบทความด้านล่าง แต่เมื่อฉันเรียกใช้ proc, SQL บ่นว่าไม่สามารถเรียกใช้ sys.sp_OACreate และ sys.sp_OADestroy ที่เรียกว่าใน proc นี้ คุณรู้วิธีที่เราสามารถเปิดส่วนประกอบเหล่านี้หรือรู้วิธีการเขียนไฟล์โดยใช้ T-SQL ขอบคุณล่วงหน้า.

6
การสำรองข้อมูลที่น้อยที่สุดทำได้ ... ด้วย SQL Server
ทุกวันเราจัดส่งข้อมูลสำรอง SQL Server ของเราทั่วทั้ง WAN เราจำเป็นต้องลดขนาดของการสำรองข้อมูลเหล่านี้เพื่อไม่ให้ใช้งานได้ตลอดไป เราไม่รังเกียจหากกระบวนการสำรองข้อมูลของเราใช้เวลานานขึ้น เนื่องจากเราจำเป็นต้องย้ายการสำรองข้อมูลที่บีบอัด 30 กรัมข้าม WAN ที่ใช้เวลานานกว่า 10 ชั่วโมง มี 2 ​​ตัวเลือกที่เราจะต้องได้รับการสำรองข้อมูลรายวันขนาดเล็ก บันทึกการจัดส่งซึ่งหมายความว่าเราจะต้องปรับโครงสร้างกระบวนการ DR ดึงข้อมูลออกจาก db และสร้างใหม่อีกด้านหนึ่ง (ดร็อปดัชนีที่ไม่ใช่คลัสเตอร์แพ็คดัชนีคลัสเตอร์ที่ 100% - สร้างใหม่อีกด้านหนึ่ง) ทั้งสองจะเกี่ยวข้องกับปริมาณงานที่เป็นธรรมจากส่วนของเรา เราใช้ SQL Server 2008 pro การสำรองข้อมูลทั้งหมดจะถูกบีบอัด มีผลิตภัณฑ์เชิงพาณิชย์ใดบ้างที่สามารถให้ตัวเลือกสำรองขนาดใกล้เคียงกันกับตัวเลือก (2) มีสคริปต์ที่ครอบคลุมที่จะช่วยให้เราสามารถบรรลุ (2)? (การจัดการมุมมองที่จัดทำดัชนีดัชนีกรองคีย์ต่างประเทศและอื่น ๆ )

4
ฉันจะแสดงรายการหรือค้นหาชื่อคอลัมน์ทั้งหมดในฐานข้อมูลของฉันได้อย่างไร
ฉันต้องการค้นหาสตริงในชื่อคอลัมน์ที่มีอยู่ในฐานข้อมูล ฉันกำลังทำงานในโครงการบำรุงรักษาและฐานข้อมูลบางส่วนที่ฉันจัดการมีมากกว่า 150 ตารางดังนั้นฉันกำลังมองหาวิธีที่รวดเร็วในการทำเช่นนี้ คุณแนะนำเมนูใด?

5
เมื่อแบบสอบถาม SQL ที่เร็วกว่าเดิมเริ่มทำงานช้าฉันจะค้นหาแหล่งที่มาของปัญหาได้ที่ไหน
พื้นหลัง ฉันมีแบบสอบถามที่ใช้กับ SQL Server 2008 R2 ที่รวมและ / หรือซ้ายเข้าร่วมกับ "ตาราง" ที่แตกต่างกันประมาณ 12 รายการ ฐานข้อมูลมีขนาดค่อนข้างใหญ่โดยมีตารางมากกว่า 50 ล้านแถวและประมาณ 300 ตารางที่แตกต่างกัน สำหรับ บริษัท ขนาดใหญ่ที่มีคลังสินค้า 10 แห่งทั่วประเทศ คลังสินค้าทั้งหมดอ่านและเขียนไปยังฐานข้อมูล ดังนั้นมันจึงค่อนข้างใหญ่และค่อนข้างยุ่ง ข้อความค้นหาที่ฉันพบมีลักษณะดังนี้: select t1.something, t2.something, etc. from Table1 t1 inner join Table2 t2 on t1.id = t2.t1id left outer join (select * from table 3) t3 …

5
ทำไมถึงมีประเภทข้อมูล varchar อยู่?
ฐานข้อมูลของฉันหลายแห่งมีเขตข้อมูลที่กำหนดเป็น varchars นี่ไม่ได้เป็นปัญหามากนักตั้งแต่ฉันอาศัยและทำงานในอเมริกา (ภาษาเดียวที่มีอยู่คือ "อเมริกัน" อะแฮ่ม ) หลังจากทำงานกับฐานข้อมูลประมาณ 5 ปีฉันก็พบว่าในที่สุดฉันก็พบปัญหาเกี่ยวกับลักษณะที่ จำกัด ของเขตข้อมูล varchar และฉันต้องแก้ไขเขตข้อมูลของฉันเพื่อเก็บข้อมูลเป็น nvarchars หลังจากต้องทำการอัปเดตอีกครั้งในตารางการแปลงเขตข้อมูล varchar เป็น nvarchar ฉันเพิ่งคิดว่า - ทำไมเรายังคงทำเช่นนี้อยู่ ฉันตัดสินใจที่จะกำหนดเขตข้อมูลใหม่ทั้งหมดของฉันเป็น nvarchar แทน varchar ซึ่งเป็นสิ่งที่ฉันเรียนรู้ที่จะทำจากหนังสือเรียนเมื่อตอนที่ฉันอยู่โรงเรียนเมื่อ 10 ปีที่แล้ว ในปี 2554 และมี SQL Server รุ่นใหม่เมื่อปีที่แล้ว ทำไมเรายังคงสนับสนุนประเภทข้อมูล varchar เมื่อเราสามารถ / ควรใช้ nvarchar แทน? ฉันรู้ว่ามันมักจะเป็นที่ถกเถียงกันอยู่ว่า nvarchars เป็น "ใหญ่เป็นสองเท่า" เป็น varchars ดังนั้นการใช้พื้นที่เก็บข้อมูลอาจเป็นหนึ่งในการโต้แย้งสำหรับ maitaining …

4
ลำดับของคอลัมน์ในคำจำกัดความของตารางมีความสำคัญหรือไม่
เมื่อกำหนดตารางการเรียงลำดับคอลัมน์ในกลุ่มเชิงตรรกะและกลุ่มจะเป็นประโยชน์ การเรียงลำดับแบบลอจิคัลของคอลัมน์ในตารางบ่งบอกถึงความหมายของผู้พัฒนาและเป็นองค์ประกอบของสไตล์ที่ดี นั่นชัดเจน อย่างไรก็ตามสิ่งที่ไม่ชัดเจนคือว่าการเรียงลำดับเชิงตรรกะของคอลัมน์ในตารางมีผลกระทบต่อการจัดเรียงทางกายภาพที่ชั้นการจัดเก็บหรือไม่หรือมีผลกระทบอื่น ๆ ที่อาจสนใจ นอกเหนือจากผลกระทบต่อสไตล์การเรียงลำดับของคอลัมน์มีความสำคัญหรือไม่ มีคำถามเกี่ยวกับ Stack Overflowเกี่ยวกับเรื่องนี้ แต่ไม่มีคำตอบที่เชื่อถือได้

1
ฉันควรใช้ดัชนีฟิลด์เดียวหลายดัชนีแทนที่จะเป็นดัชนีหลายคอลัมน์ที่เฉพาะเจาะจงหรือไม่
คำถามนี้เกี่ยวกับประสิทธิผลของเทคนิคการทำดัชนี SQL Server ฉันคิดว่าเป็นที่รู้จักกันในชื่อ "จุดตัดดัชนี" ฉันกำลังทำงานกับแอปพลิเคชัน SQL Server (2008) ที่มีอยู่ซึ่งมีปัญหาเรื่องประสิทธิภาพและความเสถียรหลายประการ นักพัฒนาทำสิ่งแปลก ๆ ด้วยการจัดทำดัชนี ฉันไม่สามารถรับข้อสรุปมาตรฐานเกี่ยวกับปัญหาเหล่านี้ได้ฉันไม่สามารถหาเอกสารที่ดีเกี่ยวกับ internets ได้ มีคอลัมน์ที่ค้นหาได้จำนวนมากในตาราง นักพัฒนาสร้างดัชนีคอลัมน์เดียวในแต่ละคอลัมน์ที่ค้นหาได้ ทฤษฎีคือ SQL Server จะสามารถรวม (ตัดกัน) แต่ละดัชนีเหล่านี้เพื่อเข้าถึงตารางอย่างมีประสิทธิภาพในสถานการณ์ส่วนใหญ่ นี่คือตัวอย่างที่ง่าย (ตารางจริงมีเขตข้อมูลเพิ่มเติม): CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... CREATE NONCLUSTERED INDEX …

2
ค้นหาข้อความค้นหาที่กำลังรออยู่
เมื่อได้รับการรอสักครู่คุณจะค้นหาแบบสอบถามที่ทำให้เกิดการรออย่างปลอดภัยบนเซิร์ฟเวอร์ SQL 2008 R2 ที่ผลิตได้อย่างไร async_network_ioเฉพาะในกรณีนี้ผมกำลังสงสัยเกี่ยวกับ

5
วิธีจัดการ TimeZone อย่างถูกต้องใน SQL Server
เซิร์ฟเวอร์การพัฒนาในพื้นที่ของฉันอยู่ในตะวันออกกลาง แต่เซิร์ฟเวอร์ที่ใช้งานจริงของฉันอยู่ในสหราชอาณาจักร ฉันต้องการแสดงวันที่ถึงผู้ใช้ในเขตเวลาของพวกเขา ตัวอย่างเช่นหากผู้ใช้อยู่ในซาอุดิอาระเบียแล้วฉันต้องแสดงเวลาตามรูปแบบซาอุดิอาระเบีย ฉันควรสร้างตารางฐานข้อมูลใหม่ที่ชื่อว่า TimeZone และบันทึกเวลาใน UTC หรือไม่

2
ISO Week กับ SQL Server Week
โอเคฉันมีรายงานที่ทำเปรียบเทียบสัปดาห์นี้กับสัปดาห์ที่แล้วและลูกค้าของเราสังเกตเห็นว่าข้อมูลของพวกเขานั้น "ขี้ขลาด" จากการตรวจสอบเพิ่มเติมเราพบว่ามันไม่ได้ทำอย่างถูกต้องเป็นสัปดาห์ตามมาตรฐาน ISO ฉันรันสคริปต์นี้เป็นกรณีทดสอบ SET DATEFIRST 1 SELECT DATEPART(WEEK, '3/26/13') , DATEPART(WEEK, '3/27/12') , DATEPART(WEEK, '3/20/12') , DATEPART(WEEK, '1/2/12') SELECT DATEPART(ISO_WEEK, '3/26/13') , DATEPART(ISO_WEEK, '3/27/12') , DATEPART(ISO_WEEK, '3/20/12') , DATEPART(ISO_WEEK, '1/2/12') เมื่อรันฉันจะได้ผลลัพธ์เหล่านี้ ฉันคิดว่านี่เป็นเรื่องแปลกและดังนั้นฉันจึงขุดเพิ่มเติมและพบว่า SQL Server นับ 1 มกราคมเป็นสัปดาห์แรกของปีที่ ISO นับวันอาทิตย์แรกของเดือนมกราคมเป็นสัปดาห์แรกของปี คำถามนั้นจบลงด้วยการเป็นสองเท่า คำถามที่ 1 ทำไมนี่คืออะไร คำถามที่ 2 มีวิธีใดบ้างที่จะเปลี่ยนแปลงสิ่งนี้ดังนั้นฉันไม่ต้องแก้ไขโค้ดทั้งหมดเพื่อใช้ในISO_Weekทุกที่ใช่ไหม

3
ตารางที่มีค่าพารามิเตอร์เป็นพารามิเตอร์ผลลัพธ์สำหรับกระบวนงานที่เก็บไว้
มันเป็นไปได้ที่จะใช้พารามิเตอร์ที่มีมูลค่าเป็นตารางสำหรับพารามิเตอร์ขาออกสำหรับกระบวนงานที่เก็บไว้หรือไม่ นี่คือสิ่งที่ฉันต้องการทำในรหัส /*First I create MY type */ CREATE TYPE typ_test AS TABLE ( id int not null ,name varchar(50) not null ,value varchar(50) not null PRIMARY KEY (id) ) GO --Now I want to create stored procedu whic is going to send output type I created, --But it looks …

2
การใช้ข้อยกเว้นในนิพจน์ตารางแบบเรียกซ้ำ
เหตุใดแบบสอบถามต่อไปนี้จึงส่งกลับแถวที่ไม่มีที่สิ้นสุด ฉันคาดว่าจะมีEXCEPTประโยคที่จะยุติการสอบถามซ้ำ .. with cte as ( select * from ( values(1),(2),(3),(4),(5) ) v (a) ) ,r as ( select a from cte where a in (1,2,3) union all select a from ( select a from cte except select a from r ) x ) select a from r ฉันเจอสิ่งนี้ในขณะที่พยายามตอบคำถามเกี่ยวกับ …

5
ผู้ประกอบการเชิงตรรกะหรือและในสภาพและคำสั่งของเงื่อนไขในที่
ตรวจสอบข้อความทั้งสองนี้: IF (CONDITION 1) OR (CONDITION 2) ... IF (CONDITION 3) AND (CONDITION 4) ... ถ้าCONDITION 1เป็นTRUEจะCONDITION 2ถูกตรวจสอบ? ถ้าCONDITION 3เป็นFALSEจะCONDITION 4ถูกตรวจสอบ? สิ่งที่เกี่ยวกับเงื่อนไขWHERE: เครื่องยนต์ SQL Server ปรับเงื่อนไขทั้งหมดในWHEREข้อ? โปรแกรมเมอร์ควรวางเงื่อนไขในลำดับที่ถูกต้องเพื่อให้แน่ใจว่าเครื่องมือเพิ่มประสิทธิภาพ SQL Server แก้ไขได้อย่างถูกต้องหรือไม่? เพิ่ม: ขอบคุณแจ็คสำหรับลิงก์แปลกใจจากรหัส t-sql: IF 1/0 = 1 OR 1 = 1 SELECT 'True' AS result ELSE SELECT 'False' AS result …

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