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

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

4
EF Code First ใช้ nvarchar (สูงสุด) สำหรับสตริงทั้งหมด สิ่งนี้จะทำให้ประสิทธิภาพการค้นหาเสียหายหรือไม่
ฉันมีฐานข้อมูลบางส่วนที่สร้างขึ้นโดยใช้รหัสเอนทิตีกรอบแรก; แอพใช้งานได้และโดยทั่วไปฉันมีความสุขมากกับสิ่งที่ Code First ให้ฉันทำ ฉันเป็นโปรแกรมเมอร์คนแรกและ DBA ที่สองตามความจำเป็น ฉันกำลังอ่านเกี่ยวกับ DataAttributes เพื่ออธิบายเพิ่มเติมใน C # สิ่งที่ฉันต้องการให้ฐานข้อมูลทำ และคำถามของฉันคือฉันจะได้รับโทษอะไรจากการมีnvarchar(max)เงื่อนไขเหล่านี้ในตารางของฉัน (ดูตัวอย่างด้านล่าง) มีหลายคอลัมน์ในตารางนี้ ใน C # พวกเขาถูกกำหนดเช่น: [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } public string Name { get; set; } public string Message { get; set; } public string Source { get; set; …

2
การเข้าสู่ระบบมีบัญชีภายใต้ชื่อผู้ใช้อื่นแล้ว
เมื่อฉันรัน SQL นี้: USE ASPState GO IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser') CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser]; GO ฉันได้รับข้อผิดพลาดต่อไปนี้: การเข้าสู่ระบบมีบัญชีภายใต้ชื่อผู้ใช้อื่นแล้ว ฉันจะรู้ได้อย่างไรว่าชื่อผู้ใช้ที่แตกต่างกันนี้สำหรับบัญชีเข้าสู่ระบบของฉันได้อย่างไร

3
วิธีการกำหนดค่าสำหรับการประเมินขนาดบัฟเฟอร์พูลที่เหมาะสมคืออะไร?
ฉันกำลังพยายามหาวิธีที่ชาญฉลาดเพื่อทำความเข้าใจว่าการmax server memory (mb)ตั้งค่านั้นเหมาะสมหรือไม่ (ควรจะต่ำกว่าหรือสูงกว่าหรืออยู่ในแนวทางที่เหมาะสม) ฉันรู้ว่าmax server memory (mb)ควรจะต่ำพอที่จะออกจากห้องสำหรับระบบปฏิบัติการตัวเอง ฯลฯ สภาพแวดล้อมที่ฉันกำลังมองหามีเซิร์ฟเวอร์หลายร้อยเครื่อง ฉันต้องการสูตรที่เชื่อถือได้ฉันสามารถใช้เพื่อตรวจสอบว่าขนาดปัจจุบันของบัฟเฟอร์พูลนั้นเหมาะสมหรือไม่เนื่องจาก RAM คิดต้นทุนต่อ GB ที่จัดสรรให้กับเซิร์ฟเวอร์แต่ละเครื่อง สภาพแวดล้อมทั้งหมดถูกจำลองเสมือนและ RAM "ทางกายภาพ" ที่จัดสรรให้กับ VM สามารถเปลี่ยนแปลงได้ง่ายขึ้นหรือลง ฉันมีอินสแตนซ์ของเซิร์ฟเวอร์ SQL ที่เฉพาะเจาะจงฉันกำลังดูด้วย PLE ที่ 1,100,052 วินาทีซึ่งเท่ากับ 12.7 วัน (ระยะเวลาที่เซิร์ฟเวอร์ใช้งาน) เซิร์ฟเวอร์มีการตั้งค่าหน่วยความจำสูงสุดของเซิร์ฟเวอร์ที่ 2560MB (2.5GB) ซึ่งมีการกำหนดเพียง 1380MB (1.3GB) เท่านั้น ฉันได้อ่านหลายรายการรวมถึงหนึ่งโดย Jonathan Keheyias ( โพสต์ ) และอีกรายการโดย Paul Randal ( โพสต์ …

19
SQL Server Management Studio เปิดหน้าต่างใหม่ช้า
หลังจากอัปเกรดทั้ง SQL Server และ Management Studio จาก 2008 เป็น 2012 Management Studio 2012 จะช้ามากเมื่อเปิดหน้าต่างแบบสอบถามและกล่องโต้ตอบใหม่ แม้แต่การคลิกขวาที่ตารางก็ช้า โดยทั่วไปจะมีความล่าช้าอย่างน้อย 5 วินาทีก่อนที่ฉันจะเริ่มทำอะไรก็ได้ภายในหน้าต่าง สิ่งนี้เกิดขึ้นทุกครั้งแม้ว่าฉันจะเปิดหน้าต่างเดียวกันสองครั้งติดต่อกัน ทำไมสิ่งนี้ถึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร แอปพลิเคชั่นอื่น ๆ สร้างการเชื่อมต่อกับฐานข้อมูลอย่างรวดเร็ว สิ่งที่ฉันลองซึ่งไม่ได้ช่วย: Hit บน Google ที่ฉันต้องการแก้ไขhostsไฟล์ของฉัน การรีเซ็ต SSMS "การตั้งค่าที่ผู้ใช้กำหนด" การอัปเดตไดรเวอร์วิดีโอปิดการเร่งด้วยฮาร์ดแวร์ปิดการใช้งาน DirectX ปิดใช้งานบริการการรับรองความถูกต้องทางชีวภาพ (ฉันไม่ได้ติดตั้ง) คอมพิวเตอร์ของฉันควรจะเร็วเกินพอและฉันยังมี RAM 16GB ฮาร์ดแวร์ของฉันไม่ควรเป็นปัญหา ดูเหมือนว่า SSMS กำลังรอบางสิ่งอยู่ฉันสามารถใช้งานโปรแกรมอื่นได้อย่างราบรื่นในขณะที่สิ่งนี้กำลังเกิดขึ้น ฉันไม่มีโอกาสติดตั้งการอัปเดต SQL Server 2012 CU1 เนื่องจากดูเหมือนว่ามีความเสี่ยงของข้อผิดพลาดในการติดตั้งโปรแกรมแก้ไขด่วนและฉันไม่สามารถเสี่ยงได้ในขณะนี้

3
OPTION FAST ในคำสั่ง SELECT ทำอะไร?
ฉันได้ทำการขุดในสิ่งที่OPTION (FAST XXX)คำใบ้ในแบบสอบถามSELECTและฉันยังสับสนอยู่ อ้างอิงจาก MSDN: ระบุว่าเคียวรีถูกปรับให้เหมาะสมสำหรับการดึง number_rows แรกอย่างรวดเร็ว นี่เป็นจำนวนเต็มที่ไม่ใช่ค่าลบ หลังจากที่ number_rows แรกถูกส่งคืนเคียวรีจะยังคงประมวลผลและสร้างชุดผลลัพธ์แบบเต็ม สำหรับฉันที่ไม่สมเหตุสมผล แต่โดยทั่วไปแล้วการสืบค้นจะได้แถว XXX แรกเร็วมากจากนั้นส่วนที่เหลือที่ความเร็วปกติคืออะไร แบบสอบถาม Microsoft Dynamics ที่ทำให้ฉันคิดในเรื่องนี้คือ: select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid from pjproj WITH (NOLOCK) where project like '%' order by project OPTION(FAST 500) ทุกคนสามารถอธิบายได้อย่างชัดเจนว่าคำใบ้ของแบบสอบถามนี้กำลังทำอะไรและมีข้อได้เปรียบเหนือการไม่ใช้

3
เหตุใดจึงแนะนำให้เก็บ BLOB ในตาราง SQL Server แยกต่างหาก
คำตอบ SO up-upvoted นี้แนะนำให้วางรูปภาพในตารางแยกกันแม้ว่าจะมีความสัมพันธ์แบบ 1: 1 กับตารางอื่นเท่านั้น: หากคุณตัดสินใจที่จะวางรูปภาพของคุณลงในตาราง SQL Server ฉันขอแนะนำอย่างยิ่งให้ใช้ตารางแยกต่างหากสำหรับการจัดเก็บรูปภาพเหล่านั้น - อย่าเก็บรูปถ่ายของพนักงานในตารางพนักงาน - เก็บไว้ในตารางแยกต่างหาก ด้วยวิธีนี้ตารางพนักงานสามารถอยู่ได้อย่างคล่องตัวและมีความหมายและมีประสิทธิภาพมากโดยสมมติว่าคุณไม่จำเป็นต้องเลือกรูปถ่ายของพนักงานเช่นกันซึ่งเป็นส่วนหนึ่งของคำสั่งของคุณ ทำไม? ฉันรู้สึกว่าSQL Server จะเก็บตัวชี้ไปที่โครงสร้างข้อมูล BLOB เฉพาะบางตัวในตารางเท่านั้นดังนั้นทำไมต้องสร้างเลเยอร์ทางอ้อมอีกด้านหนึ่งด้วยตนเอง มันปรับปรุงประสิทธิภาพอย่างมีนัยสำคัญจริงๆเหรอ? ถ้าใช่ทำไม
28 sql-server  blob 

2
ถ้าเป็นบวกให้รวมทุกรายการ หากลบให้คืนค่าแต่ละค่า
ฉันต้องการหาวิธีหาSUM()ค่าบวกทั้งหมดnumและคืนSUM()ค่าจำนวนบวกทั้งหมดและแถวแต่ละแถวสำหรับจำนวนลบแต่ละค่า ด้านล่างเป็นตัวอย่าง DDL: Create Table #Be ( id int , salesid int , num decimal(16,4) ) Insert Into #BE Values (1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00) , (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23) , (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32) และนี่คือผลลัพธ์ที่ต้องการของฉัน (จำนวนบวกสำหรับพนักงานขายแต่ละคนSUM()และรายการเชิงลบได้รับการส่งคืนแต่ละบรรทัด): …

2
ใช้มุมมองที่จัดทำดัชนีไว้สำหรับการรวม - ดีเกินจริงหรือ?
เรามีคลังข้อมูลที่มีจำนวนเรกคอร์ดที่ค่อนข้างใหญ่ (10-20 ล้านแถว) และมักเรียกใช้คิวรีที่นับเร็กคอร์ดระหว่างวันที่แน่นอนหรือนับจำนวนเรกคอร์ดด้วยค่าสถานะที่แน่นอนเช่น SELECT f.IsFoo, COUNT(*) AS WidgetCount FROM Widgets AS w JOIN Flags AS f ON f.FlagId = w.FlagId WHERE w.Date >= @startDate GROUP BY f.IsFoo ประสิทธิภาพไม่น่ากลัว แต่อาจค่อนข้างเชื่องช้า (อาจใช้เวลา 10 วินาทีในแคชเย็น) เมื่อเร็ว ๆ นี้ฉันค้นพบว่าฉันสามารถใช้GROUP BYในมุมมองที่จัดทำดัชนีและลองใช้บางสิ่งที่คล้ายกับต่อไปนี้ CREATE VIEW TestView WITH SCHEMABINDING AS SELECT Date, FlagId, COUNT_BIG(*) AS WidgetCount FROM …

1
ตัวดำเนินการสปูลกระตือรือร้นมีประโยชน์สำหรับการลบนี้จากคอลัมน์ในคลัสเตอร์หรือไม่
ฉันกำลังทดสอบการลบข้อมูลจากดัชนี columnstore แบบคลัสเตอร์ ฉันสังเกตเห็นว่ามีตัวดำเนินการเก็บพักขนาดใหญ่ที่กระตือรือร้นในแผนการดำเนินการ: สิ่งนี้เสร็จสมบูรณ์ด้วยคุณสมบัติดังต่อไปนี้: ลบ 60 ล้านแถว 1.9 GiB TempDB ใช้แล้ว เวลาดำเนินการ 14 นาที แผนอนุกรม 1 rebind บนสปูล ค่าใช้จ่ายโดยประมาณสำหรับการสแกน: 364.821 หากฉันหลอกผู้ประมาณค่าให้ดูถูกดูแคลนฉันจะได้รับแผนการที่เร็วกว่าและหลีกเลี่ยงการใช้ TempDB: ค่าใช้จ่ายโดยประมาณของการสแกน: 56.901 (นี่เป็นแผนโดยประมาณ แต่ตัวเลขในความคิดเห็นถูกต้อง) ที่น่าสนใจที่เก็บพักหายไปอีกครั้งถ้าฉันล้างร้านค้าเดลต้าโดยเรียกใช้ต่อไปนี้: ALTER INDEX IX_Clustered ON Fact.RecordedMetricsDetail REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON); สปูลจะปรากฏขึ้นเฉพาะเมื่อมีจำนวนหน้ามากกว่าเกณฑ์ในร้านเดลต้า หากต้องการตรวจสอบขนาดของร้านค้าเดลต้าฉันกำลังเรียกใช้คิวรีต่อไปนี้เพื่อตรวจสอบหน้าในแถวสำหรับตาราง: SELECT SUM([in_row_used_page_count]) AS in_row_used_pages, SUM(in_row_data_page_count) AS in_row_data_pages FROM sys.[dm_db_partition_stats] as …

1
sys.stats_columns ไม่ถูกต้องหรือไม่
สมมติว่าผมมีตารางFooที่มีคอลัมน์และคีย์หลักคอมโพสิตที่กำหนดไว้มากกว่าID1, ID2 ID2, ID1(ขณะนี้ฉันกำลังทำงานกับผลิตภัณฑ์ System Center ซึ่งมีหลายตารางที่กำหนดด้วยวิธีนี้กับคอลัมน์คีย์หลักที่แสดงรายการตามลำดับที่ตรงกันข้ามจะปรากฏในคำจำกัดความของตาราง) CREATE TABLE dbo.Foo( ID1 int NOT NULL, ID2 int NOT NULL, CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED (ID2, ID1) ); GO -- Add a row and update stats so that histogram isn't empty INSERT INTO Foo (ID1, ID2) VALUES (1,2); UPDATE STATISTICS dbo.Foo; key_ordinalคอลัมน์ในsys.index_columnsการแสดงคอลัมน์ดัชนีในลำดับเดียวกันพวกเขาถูกประกาศในคีย์หลักคอมโพสิต: …

2
กระบวนการบล็อกว่างเปล่าในรายงานกระบวนการที่ถูกบล็อก
ฉันรวบรวมรายงานกระบวนการที่ถูกบล็อกโดยใช้เหตุการณ์เพิ่มเติมและด้วยเหตุผลบางประการในรายงานบางอันblocking-processโหนดนั้นว่างเปล่า นี่คือ xml แบบเต็ม: <blocked-process-report monitorLoop="383674"> <blocked-process> <process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" …

2
ทำไม SQL Server จำเป็นต้องใช้ความยาวประเภทข้อมูลเหมือนกันเมื่อใช้ UNPIVOT
เมื่อใช้UNPIVOTฟังก์ชันกับข้อมูลที่ไม่ได้ทำให้เป็นมาตรฐาน SQL Server ต้องการให้ประเภทข้อมูลและความยาวเหมือนกัน ฉันเข้าใจว่าทำไมประเภทข้อมูลต้องเหมือนกัน แต่ทำไม UNPIVOT จึงต้องมีความยาวเท่ากัน สมมติว่าฉันมีข้อมูลตัวอย่างต่อไปนี้ที่ฉันต้องการยกเลิกการหมุน: CREATE TABLE People ( PersonId int, Firstname varchar(50), Lastname varchar(25) ) INSERT INTO People VALUES (1, 'Jim', 'Smith'); INSERT INTO People VALUES (2, 'Jane', 'Jones'); INSERT INTO People VALUES (3, 'Bob', 'Unicorn'); หากฉันพยายาม UNPIVOT FirstnameและLastnameคอลัมน์คล้ายกับ: select PersonId, ColumnName, Value from People …

9
วิธีที่มีประสิทธิภาพที่สุดในการทดสอบ FIZZBUZZ ใน SQL Server คืออะไร
นี่อาจไม่สมบูรณ์ในหัวข้อ แต่มันเป็นวันที่ช้าที่นี่ มีวิธีที่มีประสิทธิภาพมากขึ้นในการรับรายการตัวเลขจาก 1 ถึง 49 ด้วยคอลัมน์ที่มีคำหรือไม่FIZZเมื่อจำนวนสามารถหารด้วย 3 ได้อย่างเท่าเทียมกันBUZZเมื่อจำนวนสามารถหารด้วย 5 ได้อย่างเท่าเทียมกันและFIZZBUZZเมื่อจำนวนสามารถแบ่งเท่า ๆ กัน โดยทั้ง 3 และ 5? ความพยายามของฉันคือ (ข้อควรระวังนี่จะทำให้แคชกระบวนการของคุณว่างเปล่าดังนั้นอย่าเรียกใช้บนกล่องการผลิต): DBCC FREEPROCCACHE GO /*VARIANT1*/ ;WITH t AS ( SELECT RowNum = ROW_NUMBER() OVER (ORDER BY o.object_id) FROM sys.objects o ) SELECT t.RowNum , CASE WHEN ((t.RowNum % 3) + (t.RowNum % …
28 sql-server 

8
วิธีสอบถามฐานข้อมูลสำหรับตารางว่าง
เนื่องจาก 'นักพัฒนา' บางคนเราทำงานกับระบบของเราเรามีปัญหากับตารางที่ว่างเปล่า เราพบว่าระหว่างการถ่ายโอนไปยังคลาวด์มีการคัดลอกหลายตาราง แต่ข้อมูลในนั้นไม่ได้ ฉันต้องการเรียกใช้แบบสอบถามตารางระบบเพื่อค้นหาว่าตารางผู้ใช้ว่างเปล่า เรากำลังใช้ MS SQL 2008 R2 ขอบคุณสำหรับความช่วยเหลือ

3
การเพิ่มคอลัมน์ในตารางการผลิต
วิธีที่ดีที่สุดในการเพิ่มคอลัมน์ในตารางการผลิตขนาดใหญ่บน SQL Server 2008 R2 คืออะไร ตามหนังสือของ Microsoft ทางออนไลน์: การเปลี่ยนแปลงที่ระบุใน ALTER TABLE จะถูกนำไปใช้งานทันที หากการเปลี่ยนแปลงนั้นต้องการการแก้ไขแถวในตาราง ALTER TABLE จะอัพเดตแถว ALTER TABLE ได้รับ schema แก้ไขการล็อกบนตารางเพื่อให้แน่ใจว่าไม่มีการอ้างอิงการเชื่อมต่ออื่น ๆ แม้แต่ข้อมูลเมตาสำหรับตารางในระหว่างการเปลี่ยนแปลงยกเว้นการดำเนินการดัชนีออนไลน์ที่ต้องใช้การล็อค SCH-M ที่สั้นมากในตอนท้าย (http://msdn.microsoft.com/en-us/library/ms190273.aspx) บนโต๊ะขนาดใหญ่ที่มีแถวนับล้านแถวอาจใช้เวลาสักครู่ การดับเป็นตัวเลือกเดียวหรือไม่ วิธีที่ดีที่สุดในการจัดการกับสถานการณ์เช่นนี้คืออะไร?

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