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

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

5
ฉันจะรันสคริปต์ขนาดใหญ่ที่มีส่วนแทรกจำนวนมากโดยไม่ใช้หน่วยความจำไม่เพียงพอได้อย่างไร
คำถาม: ฉันมีสคริปต์ที่มีการแทรกประมาณ 45,000 รายการจากคำสั่งที่เลือก เมื่อฉันลองและเรียกใช้ฉันได้รับข้อความแสดงข้อผิดพลาดระบุว่าฉันมีหน่วยความจำไม่เพียงพอ ฉันจะทำให้สคริปต์นี้ทำงานได้อย่างไร บริบท: เพิ่มเขตข้อมูลใหม่บางส่วนเพื่อให้แอปพลิเคชันเล่นได้ดีกับแอปอื่นที่ลูกค้าใช้ มีสเปรดชีตข้อมูลจากลูกค้าที่เต็มไปด้วยข้อมูลที่แมปไอเท็มข้อมูลปัจจุบันกับค่าสำหรับฟิลด์ใหม่เหล่านี้ แปลงสเปรดชีตเพื่อแทรกคำสั่ง ถ้าฉันใช้คำสั่งบางคำสั่งใช้งานได้ แต่สคริปต์ทั้งหมดไม่ทำงาน ไม่ไม่มีการพิมพ์ผิด หากมีวิธีอื่นที่ฉันควรจะโหลดข้อมูลนี้เพื่อลงโทษฉันและแจ้งให้เราทราบ

3
Views จะปรับให้เหมาะสมเมื่อฉันเพิ่มส่วนคำสั่ง WHERE กับพวกเขาหรือไม่
มันสร้างความแตกต่างหรือไม่ถ้าคุณกรองมุมมองภายในหรือภายนอกมุมมอง ตัวอย่างเช่นมีข้อแตกต่างระหว่างสองข้อความค้นหานี้หรือไม่ SELECT Id FROM MyTable WHERE SomeColumn = 1 หรือ SELECT Id FROM MyView WHERE SomeColumn = 1 และMyViewถูกกำหนดให้เป็น SELECT Id, SomeColumn FROM MyTable และเป็นคำตอบที่แตกต่างกันหรือไม่หากตารางต้นฉบับตั้งอยู่บนเซิร์ฟเวอร์ที่เชื่อมโยง ฉันถามเพราะฉันต้องค้นหาตารางขนาดใหญ่ (44mil แถว) สองครั้งจากเซิร์ฟเวอร์ที่เชื่อมโยงและรับผลรวม ฉันต้องการทราบว่าฉันควรสร้างสองมุมมองเพื่อเข้าถึงข้อมูลหรือไม่สำหรับแต่ละแบบสอบถามหรือถ้าฉันสามารถออกไปได้ด้วยมุมมองเดียวและWHEREประโยค

4
การใช้ SQL Profiler บนฐานข้อมูลที่อยู่ระหว่างการผลิต
ในฐานะนักพัฒนาฉันใช้ SQL Profiler บ่อยครั้ง มันเป็นเครื่องมือดีบั๊กทั้งเพื่อติดตามว่าโค้ดของฉันทำอะไรและวิเคราะห์ปัญหาด้านประสิทธิภาพ แต่ฉันมักจะใช้มันในสภาพแวดล้อมการพัฒนาของฉันและในวิธีการควบคุมอย่างมาก เริ่มแอปพลิเคชันของฉันและทำให้เป็นสถานะที่ระบุ เริ่มการติดตามบนตัวสร้างโปรไฟล์ ดำเนินการตามลำดับของการกระทำที่ระบุในใบสมัครของฉัน หยุดการติดตามและตรวจสอบผลลัพธ์ SQL Profiler สามารถนำไปใช้งานจริงในสภาพแวดล้อมที่ใช้งานจริงได้หรือไม่? ความกังวลแรกของฉันคือมันจะลดประสิทธิภาพ ข้อกังวลประการที่สองของฉันคือเพราะในการผลิตคุณไม่ได้กระตุ้นให้เกิดการกระทำที่น่าสนใจ คุณจะต้องปล่อยให้ตัวรวบรวมข้อมูลทำงานเป็นเวลานานจากนั้นวิเคราะห์ผลลัพธ์ ชุดผลลัพธ์กลายเป็นสิ่งที่ไม่แน่นอนเกินไปหรือไม่ (ใช้พื้นที่ดิสก์มากเกินไปและไม่สามารถสืบค้นได้ยาก) ใครใช้ SQL Profiler ในการผลิตหรือไม่

3
INSERT ที่มีประสิทธิภาพเข้าสู่ตารางที่มีดัชนีเป็นกลุ่ม
ฉันมีคำสั่ง SQL ที่แทรกแถวลงในตารางที่มีดัชนีคลัสเตอร์ในคอลัมน์ TRACKING_NUMBER เช่น: INSERT INTO TABL_NAME (TRACKING_NUMBER, COLB, COLC) SELECT TRACKING_NUMBER, COL_B, COL_C FROM STAGING_TABLE คำถามของฉันคือ - มันช่วยในการใช้คำสั่งย่อย ORDER BY ในคำสั่ง SELECT สำหรับคอลัมน์ดัชนีคลัสเตอร์หรือไม่หรือการได้รับผลประโยชน์ใด ๆ จะได้รับผลกระทบจากการเรียงลำดับพิเศษที่จำเป็นสำหรับคำสั่ง ORDER BY?


2
หลักการฐานข้อมูลเป็นเจ้าของสกีมาในฐานข้อมูลและไม่สามารถทิ้งข้อความได้
ฉันพยายามลบหลักการจากฐานข้อมูล แต่ไม่สามารถทำได้เพราะเป็นเจ้าของสคีมา อย่างไรก็ตามเมื่อฉันไปแก้ไขผู้ใช้กล่องเพื่อยกเลิกการเลือก schemae นั้นเป็นสีน้ำเงินและไม่สามารถเคลื่อนย้ายได้ ฉันจะลบหลักการออกจากสกีมาเหล่านี้ได้อย่างไร

2
ทำไมเราต้องสร้างและจัดระเบียบดัชนีใหม่ใน SQL Server
หลังจากค้นหาอินเทอร์เน็ตฉันไม่สามารถหาสาเหตุได้ ทำไมเราต้องสร้างและจัดระเบียบดัชนีใหม่ใน SQL Server เกิดอะไรขึ้นภายในเมื่อเราสร้างและจัดระเบียบใหม่ บทความในเว็บไซต์พูดว่า: ดัชนีควรสร้างใหม่เมื่อการแตกแฟรกเมนต์ดัชนีดีกว่า 40% ดัชนีควรถูกจัดระเบียบใหม่เมื่อการกระจายตัวของดัชนีอยู่ระหว่าง 10% ถึง 40% กระบวนการสร้างดัชนีใหม่ใช้ CPU มากขึ้นและล็อคทรัพยากรฐานข้อมูล เวอร์ชันการพัฒนา SQL Server และเวอร์ชันองค์กรมีตัวเลือก ONLINE ซึ่งสามารถเปิดได้เมื่อสร้างดัชนีใหม่ ตัวเลือกออนไลน์จะทำให้ดัชนีพร้อมใช้งานในระหว่างการสร้างใหม่ ฉันไม่สามารถเข้าใจได้ถึงแม้ว่ามันจะบอกว่าWHENต้องทำสิ่งนี้ แต่ฉันอยากรู้ว่าWHYเราจำเป็นต้องสร้างและจัดระเบียบดัชนีใหม่หรือไม่

1
การใช้ varchar (5,000) จะไม่ดีเมื่อเทียบกับ varchar (255)
ตั้งแต่varcharanyways จัดสรรพื้นที่แบบไดนามิกคำถามของฉันคือไม่ว่าจะใช้มีประสิทธิภาพมากขึ้นหรือประหยัดพื้นที่มากขึ้นเมื่อเทียบกับการใช้varchar(255) varchar(5000)ถ้าใช่ทำไม
28 sql-server 

6
แบบสอบถามเพื่อรายงานการจัดสรรพื้นที่ดิสก์และพื้นที่ใช้งาน
เรากำลังใช้ฐานข้อมูลทั้งหมด 6 รายการสำหรับแอปพลิเคชันและเราสามารถแบ่งปันพื้นที่ 4TB ในฐานข้อมูลที่เติบโตอัตโนมัติทั้ง 6 รายการ (ผ่านที่เก็บข้อมูล SAN) ฉันต้องการเขียนแบบสอบถาม (รายงาน) สำหรับฐานข้อมูลเดียวที่ระบุแอตทริบิวต์ "พื้นที่ที่จัดสรรในปัจจุบัน" และ "พื้นที่ว่างที่มีอยู่" ภายใต้ตัวเลือกงาน> ลดขนาด> ฐานข้อมูลใน Studio จัดการเซิร์ฟเวอร์ SQL จากนั้นฉันต้องการแปลงตัวเลขเหล่านี้เป็น TB และรวมแต่ละฐานข้อมูลเพื่อให้ได้ประมาณคร่าวๆว่ามีพื้นที่เหลืออยู่เท่าใด สามารถเข้าถึงฟิลด์เหล่านี้ผ่านการสืบค้น T-SQL ได้หรือไม่? ถ้าเป็นเช่นนั้นแบบสอบถามจะมีลักษณะอย่างไร

4
ตรวจสอบว่ามีผู้ใช้อยู่ในฐานข้อมูล SQL Server หรือไม่
ฉันทำงานกับ SQL Server 2012 ฉันต้องการตรวจสอบว่ามีผู้ใช้อยู่ก่อนที่จะเพิ่มลงในฐานข้อมูลหรือไม่ นี่คือสิ่งที่ฉันได้ทดสอบ: USE [MyDatabase] GO IF NOT EXISTS (SELECT name FROM [sys].[server_principals] WHERE name = N'IIS APPPOOL\MyWebApi AppPool') Begin CREATE USER [IIS APPPOOL\MyWebApi AppPool] FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo] end ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool] GO แต่รหัสนี้จะไม่กลับมาหากผู้ใช้ที่มีอยู่ในSELECT name FROM [sys].[server_principals]MyDatabase ฉันจะตรวจสอบว่ามีผู้ใช้อยู่ในได้MyDatabaseอย่างไร?

2
"ดัชนีการจับคู่บางส่วน" คืออะไร
ฉันกำลังพยายามเรียนรู้เพิ่มเติมเกี่ยวกับตัวดำเนินการแบบสอบถาม "การอ้างอิงต่างประเทศ" ที่แนะนำใน SQL Server 2016 มีข้อมูลไม่มากนัก Microsoft ประกาศมันนี่และฉัน blogged เกี่ยวกับเรื่องนี้ที่นี่ ผู้ประกอบการใหม่สามารถมองเห็นได้โดยการลบแถวจากตารางผู้ปกครองที่มี 254 หรือเข้ามาเพิ่มเติมอ้างอิงที่สำคัญต่างประเทศ: การเชื่อมโยง dbfiddle มีจำนวนการนับที่แตกต่างกันสามรายการที่แสดงในรายละเอียดผู้ประกอบการ การอ้างอิงคีย์ต่างประเทศนับเป็นจำนวนของคีย์ต่างประเทศที่เข้ามา ไม่มีการนับดัชนีที่ตรงกันคือจำนวนกุญแจต่างประเทศที่เข้ามาโดยไม่มีดัชนีที่เหมาะสม การตรวจสอบว่าตารางที่อัปเดตหรือถูกลบจะไม่ละเมิดข้อ จำกัด ดังกล่าวจะต้องสแกนตารางลูก ฉันไม่รู้ว่าการจับคู่ดัชนีบางส่วนหมายถึงอะไร ดัชนีการจับคู่บางส่วนในบริบทนี้คืออะไร ฉันไม่สามารถทำงานต่อไปนี้ได้: ดัชนีที่กรองแล้ว การวางคอลัมน์คีย์ต่างประเทศเป็นINCLUDEคอลัมน์สำหรับดัชนี สร้างดัชนีด้วยคอลัมน์ foreign key เป็นคอลัมน์ key ที่สอง ดัชนีคอลัมน์เดี่ยวสำหรับปุ่มต่างประเทศหลายคอลัมน์ การสร้างดัชนีครอบคลุมหลายรายการเพื่อเปิดใช้งานแผน "เข้าร่วมดัชนี" สำหรับคีย์ต่างประเทศหลายคอลัมน์ Dan Guzmanชี้ให้เห็นว่าคีย์ต่างประเทศหลายคอลัมน์สามารถจับคู่ดัชนีแม้ว่าคีย์ดัชนีจะอยู่ในลำดับที่แตกต่างจากคอลัมน์คีย์ต่างประเทศ รหัสของเขาอยู่ที่นี่ในกรณีที่มีคนสามารถใช้เป็นจุดเริ่มต้นเพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับดัชนีการจับคู่บางส่วน

4
การคัดลอกตาราง (หลายร้อย) จากเซิร์ฟเวอร์หนึ่งไปยังอีก (ด้วย SSMS)
ฉันมีตารางหลายร้อย (ปัจจุบัน 466 แต่เคยเติบโต) ตารางฉันต้องคัดลอกจากเซิร์ฟเวอร์หนึ่งไปยังอีก ฉันไม่เคยทำแบบนี้มาก่อนดังนั้นฉันไม่แน่ใจเลยว่าจะเข้าใกล้มันอย่างไร ตารางทั้งหมดอยู่ในรูปแบบเดียวกัน:Cart<Eight character customer number> นี่เป็นส่วนหนึ่งของโครงการขนาดใหญ่ที่ฉันรวมCart<Number>ตารางเหล่านี้ทั้งหมดเข้ากับตารางเดียวCartsแต่นั่นเป็นคำถามที่แตกต่างกันโดยสิ้นเชิง ใครบ้างมีวิธีปฏิบัติที่ดีที่สุดที่ฉันสามารถใช้เพื่อคัดลอกตารางเหล่านี้ทั้งหมดหรือไม่ ชื่อฐานข้อมูลบนเซิร์ฟเวอร์ทั้งสองจะเหมือนกันหากเป็นเช่นนั้น และอย่างที่ฉันบอกไว้ก่อนหน้านี้ฉันมีsaบัญชีเพื่อให้ฉันสามารถทำสิ่งที่จำเป็นเพื่อรับข้อมูลจาก A ถึง B เซิร์ฟเวอร์ทั้งสองอยู่ในเซิร์ฟเวอร์ฟาร์มเดียวกันเช่นกัน

1
SQL Server 2014: คำอธิบายใด ๆ สำหรับการประเมิน cardinality ที่ไม่สอดคล้องกันของตนเอง?
พิจารณาแผนแบบสอบถามต่อไปนี้ใน SQL Server 2014: ในแผนแบบสอบถามการเข้าร่วมด้วยตนเองar.fId = ar.fIdจะให้ผลประมาณ 1 แถว อย่างไรก็ตามนี่เป็นค่าประมาณที่ไม่สอดคล้องกันเชิงตรรกะ: arมี20,608แถวและมีค่าที่แตกต่างกันเพียงหนึ่งค่าfId(สะท้อนให้เห็นอย่างถูกต้องในสถิติ) ดังนั้นการเข้าร่วมนี้จะสร้างผลิตภัณฑ์ไขว้เต็มของแถว ( ~424MMแถว) ทำให้คิวรีทำงานเป็นเวลาหลายชั่วโมง ฉันมีเวลายากที่จะเข้าใจว่าทำไม SQL Server ถึงได้มีการประมาณการที่สามารถพิสูจน์ได้อย่างง่ายดายว่าไม่สอดคล้องกับสถิติ ความคิดใด ๆ การตรวจสอบเบื้องต้นและรายละเอียดเพิ่มเติม จากคำตอบของ Paul ที่นี่ดูเหมือนว่าทั้งฮิวริสติก SQL 2012 และ SQL 2014 สำหรับการประเมิน cardinality ที่เข้าร่วมควรจัดการสถานการณ์ที่ฮิสโทแกรมที่เหมือนกันทั้งสองต้องเปรียบเทียบได้ง่าย ฉันเริ่มต้นด้วยผลลัพธ์จากการตั้งค่าสถานะการสืบค้นกลับ 2363 แต่ไม่สามารถเข้าใจได้อย่างง่ายดาย ตัวอย่างต่อไปนี้หมายความว่า SQL Server เปรียบเทียบฮิสโตแกรมสำหรับfIdและbIdเพื่อประเมินการเลือกของการเข้าร่วมที่ใช้เท่านั้นfIdหรือไม่ ถ้าเป็นเช่นนั้นแน่นอนว่าจะไม่ถูกต้อง หรือฉันกำลังอ่านเอาต์พุตแฟล็กการติดตามผิด? Plan for computation: CSelCalcExpressionComparedToExpression( QCOL: [ar].fId x_cmpEq QCOL: …

6
วิธีดูมุมมองที่เข้ารหัสหรือกระบวนงานที่เก็บไว้
ฉันกำลังทำงานกับฐานข้อมูลบุคคลที่สาม เมื่อฉันพยายามที่จะดูคำจำกัดความของมุมมองโดยการคลิกขวาCREATE TOจากนั้นNEW QUERY EDIT WINDOWฉันก็จะได้รับข้อผิดพลาด: คุณสมบัตินี้อาจไม่มีอยู่สำหรับวัตถุนี้หรืออาจไม่สามารถเรียกคืนได้เนื่องจากสิทธิ์การเข้าถึงไม่เพียงพอ ข้อความถูกเข้ารหัส

6
การเปลี่ยนการใช้ GETDATE () ในฐานข้อมูลทั้งหมด
ฉันต้องโยกย้ายฐานข้อมูล SQL Server 2017 ในสถานที่ไปยังฐานข้อมูล Azure SQL และฉันเผชิญกับความท้าทายบางอย่างเนื่องจากมีข้อ จำกัด อยู่บ้าง โดยเฉพาะอย่างยิ่งเนื่องจากฐานข้อมูล Azure SQL ทำงานได้เฉพาะในเวลา UTC (ไม่มีเขตเวลา) และเราต้องการเวลาท้องถิ่นเราจึงต้องเปลี่ยนการใช้งานGETDATE() ทุกที่ในฐานข้อมูลซึ่งพิสูจน์แล้วว่าทำงานได้ดีกว่าที่คาดไว้ ฉันสร้างฟังก์ชันที่ผู้ใช้กำหนดเพื่อให้ได้เวลาท้องถิ่นที่ทำงานอย่างถูกต้องสำหรับเขตเวลาของฉัน: CREATE FUNCTION [dbo].[getlocaldate]() RETURNS datetime AS BEGIN DECLARE @D datetimeoffset; SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time'; RETURN(CONVERT(datetime,@D)); END ปัญหาที่ฉันมีปัญหาคือการเปลี่ยนแปลงจริง ๆGETDATE()กับฟังก์ชั่นนี้ในทุกมุมมองกระบวนงานที่เก็บไว้คอลัมน์ที่คำนวณได้ค่าเริ่มต้นข้อ จำกัด อื่น ๆ ฯลฯ อะไรจะเป็นวิธีที่ดีที่สุดในการใช้การเปลี่ยนแปลงนี้ …

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