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

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

4
ฉันจะแปลงจำนวนเต็มบวก 100 ล้านตัวแรกเป็นสตริงได้อย่างไร
นี่คือการเบี่ยงเบนจากปัญหาจริง หากการจัดเตรียมบริบทช่วยให้การสร้างข้อมูลนี้อาจเป็นประโยชน์สำหรับวิธีการทดสอบประสิทธิภาพของการประมวลผลสตริงสำหรับการสร้างสตริงที่ต้องมีการดำเนินการบางอย่างที่นำไปใช้กับพวกเขาภายในเคอร์เซอร์หรือสำหรับการสร้างชื่อเฉพาะ ฉันแค่สนใจวิธีที่มีประสิทธิภาพในการสร้างข้อมูลภายในเซิร์ฟเวอร์ SQL โปรดอย่าถามว่าทำไมฉันจึงต้องสร้างข้อมูลนี้ ฉันจะพยายามเริ่มด้วยคำนิยามที่ค่อนข้างเป็นทางการ สตริงจะรวมอยู่ในชุดข้อมูลหากประกอบด้วยตัวอักษรพิมพ์ใหญ่จาก A - Z เทอมแรกของชุดคือ "A" ชุดประกอบด้วยสตริงที่ถูกต้องทั้งหมดเรียงตามความยาวก่อนและตามลำดับตัวอักษรทั่วไปที่สอง หากสายอยู่ในตารางในคอลัมน์ที่เรียกว่าSTRING_COLคำสั่งซื้อจะถูกกำหนดไว้ใน T-SQL ORDER BY LEN(STRING_COL) ASC, STRING_COL ASCเป็น เพื่อให้คำจำกัดความที่เป็นทางการน้อยลงให้ดูที่ส่วนหัวคอลัมน์ตามตัวอักษรใน excel ชุดเป็นรูปแบบเดียวกัน ลองพิจารณาว่าคุณจะแปลงจำนวนเต็มเป็นฐาน 26 ได้อย่างไร: 1 -> A, 2 -> B, 3 -> C, ... , 25 -> Y, 26 -> Z, 27 -> AA, 28 -> AB, …

1
ความแตกต่างระหว่าง“ และ” และ“ &”
ฉันพยายามที่จะเข้าใจลำดับความสำคัญของการดำเนินการทางตรรกะและมีรหัสต่อไปนี้: declare @T bit ='TRUE' declare @F bit ='False' print @T and @F และจะส่งคืนข้อผิดพลาดเป็น ไวยากรณ์ไม่ถูกต้องใกล้กับคำหลัก 'และ' ฉันแทนที่ 'และ' ด้วย '&' และรหัสทำงานอีกครั้ง ทำไมรหัสเดิมไม่ทำงาน ฉันใช้เซิร์ฟเวอร์ SQL
13 sql-server  t-sql 

2
@os_run_priority ใน sp_add_jobstep ใช้งานได้จริงใน SQL Server 2008 R2 หรือไม่
ไม่@os_run_priorityในsp_add_jobstepการทำงานจริงใน SQL Server 2008 R2? มันอธิบายว่า "สงวน" หรือ "ไม่มีเอกสาร" อย่างไรก็ตามฉันเห็นในsp_add_jobstepนิยาม: @os_run_priority INT = 0, -- -15 = Idle, -1 = Below Normal, 0 = Normal, 1 = Above Normal, 15 = Time Critical)

1
สิ่งที่ทำให้ SQL Server แลกเปลี่ยนชื่อวัตถุสำหรับสตริงที่ส่งผ่านไปยังโพรซีเดอร์ระบบ
สิ่งที่ทำให้มันถูกต้องตามกฎหมายที่จะส่งชื่อวัตถุที่จะขั้นตอนของระบบที่เก็บไว้sp_helptext? กลไกใดที่แปลงชื่อวัตถุเป็นสตริง เช่น -- works sp_helptext myproc sp_helptext [myproc] sp_helptext [dbo.myproc] -- and behaves the same as a string sp_helptext 'myproc' sp_helptext 'dbo.myproc' -- does not work sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.' -- an additional case that does not work. …

1
การเปลี่ยนแปลงค่าประมาณของเพรดิเคตที่มี SUBSTRING () ใน SQL Server 2016 หรือไม่
มีเอกสารหรืองานวิจัยใดเกี่ยวกับการเปลี่ยนแปลงใน SQL Server 2016 ถึงความคาดการณ์ของ cardinality สำหรับเพรดิเคตที่มี SUBSTRING () หรือฟังก์ชันสตริงอื่น ๆ หรือไม่? เหตุผลที่ฉันถามคือฉันกำลังดูคิวรีที่ประสิทธิภาพลดลงในโหมดความเข้ากันได้ 130 และสาเหตุที่เกี่ยวข้องกับการเปลี่ยนแปลงในการประมาณจำนวนแถวที่ตรงกับส่วนคำสั่ง WHERE ที่มีการเรียกไปยัง SUBSTRING () ฉันแก้ไขปัญหาด้วยการเขียนแบบสอบถามใหม่ แต่สงสัยว่าถ้าใครรู้เรื่องเอกสารเกี่ยวกับการเปลี่ยนแปลงในพื้นที่นี้ใน SQL Server 2016 รหัสการสาธิตอยู่ด้านล่าง ค่าประมาณใกล้เคียงกันมากในกรณีทดสอบนี้ แต่ความแม่นยำนั้นขึ้นอยู่กับข้อมูล ในกรณีทดสอบในระดับที่เข้ากันได้ 120, SQL Server ดูเหมือนจะใช้ฮิสโตแกรมสำหรับการประมาณการในขณะที่ในระดับที่เข้ากันได้ 130 SQL Server ดูเหมือนจะสมมติว่า 10% คงที่ของตารางที่ตรงกัน CREATE DATABASE MyStringTestDB; GO USE MyStringTestDB; GO DROP TABLE IF EXISTS dbo.StringTest; …

4
การเปรียบเทียบค่า NULL ด้วยตนเองในตาราง
ฉันมักจะสับสนเกี่ยวกับพฤติกรรม t-sql ลึกลับบางอย่างเช่นต่อไปนี้ -- Create table t and insert values. use tempdb CREATE TABLE dbo.t (a INT NULL); -- insert 3 values INSERT INTO dbo.t values (NULL),(0),(1); GO set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null go -- expect 3 …

4
มีค่าที่ฉันสามารถใช้ใน SELECT TOP ที่จะส่งคืนแถวทั้งหมดหรือไม่
ฉันอนุญาตให้ผู้ใช้กำหนดจำนวนแถวที่ส่งคืนโดยแบบสอบถาม (SELECT TOP (@x)) มีค่าที่สามารถป้อนที่ส่งคืนแถวทั้งหมดหรือไม่ หรือฉันต้องสร้างคิวรีแบบไดนามิกโดยไม่มี TOP (@x) หากต้องการให้ส่งคืนแถวทั้งหมดหรือไม่ ฉันใช้ SQL Server 2012
13 sql-server 

7
ไม่มีใครรู้ว่าเครื่องมือนี้เรียกว่าอะไร? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน3 ปีที่ผ่านมา งานที่ได้ผลนั้นคลานไปพักหนึ่งในขณะที่เราพยายามหาว่าสีแดงบนหน้าปกของ Microsoft SQL Server 2012 Internals (2013, 0735658560) คืออะไร เราคิดว่ามันเป็นเครื่องมือผ่าตัดหรือเครื่องใช้ไฟฟ้าบางประเภท? คิด?
13 sql-server 

2
SELECT TOP 1 เป็นอันตรายต่อประสิทธิภาพการค้นหา มีวิธีเข้าถึง dba เพื่อเอาชนะสิ่งนี้หรือไม่
ในแอปพลิเคชันที่ใช้งานจริง (C # กำลังพูดคุยกับ SQL Server 2014 Standard) มีข้อความค้นหาที่มีลักษณะดังนี้ด้านล่าง เวลาส่วนใหญ่จะทำงานในหน่วยมิลลิวินาที แต่บางครั้ง (สำหรับค่าบางอย่าง@Id) มันจะไปถั่วและใช้เวลาประมาณหนึ่งนาที นี่เป็นเวลานานกว่าการหมดเวลาของแอปดังนั้นแอปจึงล้มเหลวสำหรับผู้ใช้ ในกรณี "go nuts" ชุดผลลัพธ์ที่ส่งคืนจะว่างเปล่าอย่างถูกต้องเนื่องจากอยู่ในหลาย ๆ กรณี แต่ไม่ใช่ทุกกรณี โชคดีที่สิ่งนี้สามารถทำซ้ำได้ทั้งในสภาพแวดล้อมการผลิตและการพัฒนา นักพัฒนาซอฟต์แวร์แจ้งว่าการลบ "TOP 1" ออกจากคำค้นหาจากนั้นตรวจสอบให้แน่ใจว่าแอปนั้นใช้แถวเพิ่มเติมของชุดผลลัพธ์เพื่อล้างปัญหาด้านประสิทธิภาพ ตัววางแผนคิวรีไม่แนะนำดัชนีเมื่อTOP 1มีอยู่ (ใน dev) กำลังเปลี่ยนคิวรีและแก้ไขแอปอยู่ในระหว่างดำเนินการ การเปิดตัวใช้เวลาสักครู่ คำถามของฉัน:มีวิธีใดบ้างที่สามารถเข้าถึง DBA ในการปรับแต่งหรือปรับแต่งอินสแตนซ์ SQL Server ที่ใช้งานได้เพื่อแก้ไขปัญหานี้ก่อนที่แอพจะเปลี่ยนด้วยการสืบค้นใหม่ SELECT TOP 1 subscription_id FROM subscription AS sub JOIN billing_info AS bi …

3
ไม่ได้ใช้ 512 ไบต์จากหน้าข้อมูล 8 KByte ของ SQL Server
ฉันสร้างตารางต่อไปนี้: CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); จากนั้นสร้างดัชนีคลัสเตอร์: CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); ต่อไปฉันเติมด้วย 30 แถวแต่ละขนาดคือ 256 ไบต์ (ตามประกาศตาราง): DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO …

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แต่ฉันไม่คิดว่ามันเหมาะสมสำหรับปัญหานี้)

2
กรอกข้อมูลวันที่ที่หายไปด้วยค่าข้อมูลจากวันที่ที่เติมก่อนหน้าสำหรับกลุ่ม
รูปภาพตั๋วโต๊ะช่วยเหลือที่รับถ่ายโอนระหว่างแผนกต่างๆ เราต้องการทราบว่าแผนกคืออะไรในตอนท้ายของวันสำหรับตั๋วแต่ละใบสำหรับแต่ละวันที่เปิดตั๋ว ตารางประกอบด้วยแผนกสุดท้ายสำหรับแต่ละตั๋วสำหรับแต่ละวันที่เปิดซึ่งมีการเปลี่ยนแปลงในแผนก (รวมถึงแถวสำหรับวันที่เปิดตั๋วในตอนแรกและวันที่ปิด) ตารางข้อมูลมีลักษณะดังนี้: CREATE TABLE TicketAssigment ( TicketId INT NOT NULL, AssignedDate DATE NOT NULL, DepartmentId INT NOT NULL); สิ่งที่ฉันต้องการคือการกรอกวันที่ที่ขาดหายไปสำหรับ TicketId แต่ละอันโดยใช้ DepartmentId จากแถว TicketAssigment หน้าที่แล้วเรียงลำดับตามวันที่ หากฉันมี TicketAssigment แถวเช่นนี้: 1, '1/1/2016', 123 -- Opened 1, '1,4,2016', 456 -- Transferred and closed 2, '1/1/2016', 25 -- Opened 2, '1/2/2016', …

1
ดัชนีแบบคลัสเตอร์ไม่ได้ใช้ในคำสั่งลบ
ฉันมีตาราง SQL Server ที่กำหนดดังนี้ CREATE TABLE [dbo].[Production_Detail] ( [Id] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [dbo].[Production_Detail_Seq]), [Meta_Data_ID] INT NOT NULL , [Production_Detail_Time] DATETIME NOT NULL, [Production_Detail_Time_Local] DATETIME NOT NULL, [Production_Detail_Value] FLOAT NULL, [IntegratedDM] BIT NOT NULL DEFAULT 0, [DailyIntegratedDM] BIT NOT NULL DEFAULT 0, [InsertedDate] DateTime NOT NULL, [ModifiedDate] …

3
total_elapsed_time ใน DMV sys.dm_exec_requests ไม่ถูกต้องสมบูรณ์หรือไม่
ฉันกำลังเรียกใช้ SQL Server 2012 และพยายามรวบรวมแบบสอบถามเพื่อตรวจสอบการใช้ DMV อย่างไรก็ตามเมื่อดูที่total_elapsed_timeฟิลด์ในsys.dm_exec_requestsDMV ตัวเลขจะดูออกไป นี่คือตัวอย่าง: SELECT session_id, RunTime = CURRENT_TIMESTAMP, start_time, total_elapsed_time FROM sys.dm_exec_requests WHERE session_id = 284; session_id RunTime start_time total_elapsed_time 284 2016-04-07 16:14:03.690 2016-04-07 16:08:14.587 1419976 จากการคำนวณของฉัน * เวลาที่ผ่านไปควรอยู่ที่ประมาณ 349,103 - ไม่ใช่ 1,419,976 ที่ปิดโดยเกิน 4 ปัจจัย * จากความแตกต่างเป็นมิลลิวินาทีระหว่างเวลาปัจจุบันและstart_timeคือ SELECT DATEDIFF(MILLISECOND, '2016-04-07T16:08:14.587', '2016-04-07T16:14:03.690'); นี่คือข้อมูลเซิร์ฟเวอร์: SELECT …

2
ความหลากหลายในเวลาแทรกจำนวนมาก
ดังนั้นฉันจึงมีกระบวนการแทรกจำนวนมากเพื่อนำข้อมูลจากตารางการแสดงละครของเราและย้ายไปยังดาต้ามาร์ตของเรา กระบวนการนี้เป็นงานการไหลของข้อมูลอย่างง่ายพร้อมการตั้งค่าเริ่มต้นสำหรับ "แถวต่อชุด" และตัวเลือกคือ "tablock" และ "ไม่มีข้อ จำกัด ในการตรวจสอบ" โต๊ะค่อนข้างใหญ่ 587,162,986 ที่มีขนาดข้อมูล 201GB และ 49GB ของพื้นที่ดัชนี ดัชนีคลัสเตอร์สำหรับตารางคือ CREATE CLUSTERED INDEX ImageData ON dbo.ImageData ( DOC_ID ASC, ACCT_NUM ASC, MasterID ASC ) และคีย์หลักคือ: ALTER TABLE dbo.ImageData ADD CONSTRAINT ImageData PRIMARY KEY NONCLUSTERED ( ImageID ASC, DT_CRTE_DOC ASC ) ตอนนี้เราพบปัญหาที่BULK INSERTSSIS ทำงานช้าอย่างไม่น่าเชื่อ …

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