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

Transact-SQL (T-SQL) เป็นภาษาถิ่นของ SQL ที่ใช้โดย Microsoft SQL Server และ Sybase ของ SAP

2
แปลงคอลัมน์วันที่และเวลาเป็นจำนวนวินาที
ในฐานข้อมูล SQL Server ของฉันฉันมีdatetimeคอลัมน์ เป็นวิธีที่ดีในการสร้างคอลัมน์ใหม่ที่แสดงlongค่าสำหรับdatetimeคอลัมน์อย่างไร longจะเป็นตัวแทนจำนวนวินาที ฉันคิดว่าถ้าฉันสามารถแปลงเป็นlongsมันจะทำให้ง่ายขึ้นในการจัดกลุ่มตามข้อความค้นหาในช่วงเวลาเนื่องจากฉันสามารถแบ่งจำนวนยาวด้วยจำนวนคงที่ได้ ตารางคงที่จะไม่อัปเดตหรือลบข้อมูล

2
วิธีการเปลี่ยนฐานข้อมูลแบบไดนามิกโดยใช้ TSQL
ฉันมีปัญหากับการพยายามเปลี่ยนบริบทของ SSMS เป็นฐานข้อมูลที่ระบุใน SQL แบบไดนามิก: EXEC sys.sp_executesql N'USE db1 ' ; สามารถดำเนินการได้สำเร็จ แต่บริบทฐานข้อมูลของ SSMS จะไม่เปลี่ยนแปลง ฉันได้ลองปรับเปลี่ยนเล็กน้อยตามข้างบน DECLARE @sql NVARCHAR(100) DECLARE @db NVARCHAR(50) SET @db = N'db1' SET @sql = N'Use ' + @db EXEC sp_executesql @sql ดำเนินการสำเร็จอีกครั้ง แต่ฐานข้อมูลไม่เปลี่ยนแปลง

3
SQL Server แทรกเข้าไป - วิธีการระบุคอลัมน์ที่ทำให้เกิดข้อผิดพลาดการตัด
ฉันมีขั้นตอนการจัดเก็บที่แทรก 650 ฟิลด์ลงในตาราง การแทรกล้มเหลวด้วยข้อผิดพลาดการตัด มันง่ายมาก INSERT INTO SELECT (a bunch of fields) FROM (a bunch of tables) ด้านล่างนี้เป็นข้อความแสดงข้อผิดพลาด: ข่าวสารเกี่ยวกับ 8152, ระดับ 16, สถานะ 14, กระบวนงาน DSP_Procedure, สาย 1075 สายอักขระหรือข้อมูลไบนารีจะถูกตัดทอน มีวิธีที่รวดเร็วที่ฉันสามารถระบุฟิลด์ที่ทำให้เกิดข้อผิดพลาดการตัด? ความจริงที่ว่าคำสั่ง select ที่จะแทรกลงในตารางมี 650 ฟิลด์ทำให้ยากที่จะระบุว่าฟิลด์ใดที่ทำให้เกิดข้อผิดพลาดการตัด ฉันคิดว่าฉันสามารถแสดงความคิดเห็นบล็อกของเขตข้อมูลได้ครั้งละหนึ่งครั้งเพื่อให้มีการแทรก SP เพียง 100 ครั้งในแต่ละครั้งจากนั้นจึงเรียกใช้ SP 6 หรือ 7 ครั้งที่แตกต่างกันจนกว่าฉันจะแคบลงอย่างน้อย 100 กลุ่ม ที่จะมีฟิลด์ที่ทำให้เกิดข้อผิดพลาดการตัด อีกทางหนึ่งฉันคิดว่าบางทีฉันสามารถSELECT INTOสร้างตารางใหม่และเปรียบเทียบความยาวข้อมูลในตารางเทียบกับความยาวข้อมูลของตารางเป้าหมายที่ฉันพยายามแทรกลงใน …

4
วิธีสร้างแถวสำหรับทุกวันในช่วงวันที่โดยใช้กระบวนงานที่เก็บไว้ได้อย่างไร
ฉันต้องการสร้างกระบวนงานที่เก็บไว้ซึ่งจะสร้างแถวในตารางสำหรับทุกวันในช่วงวันที่ที่กำหนด กระบวนงานที่เก็บไว้ยอมรับสองอินพุต - วันที่เริ่มต้นและวันที่สิ้นสุดของช่วงวันที่ที่ผู้ใช้ต้องการ ดังนั้นสมมติว่าฉันมีตารางดังนี้ SELECT Day, Currency FROM ConversionTable Day คือ DateTime และ Currency เป็นเพียงจำนวนเต็ม เพื่อให้ง่ายขึ้นสมมติว่าฉันต้องการให้คอลัมน์สกุลเงินเป็น 1 สำหรับแต่ละแถวที่แทรกเหล่านี้ ดังนั้นหากมีคนป้อน '5 มีนาคม 2017' เป็นวันที่เริ่มต้นและ '11 เมษายน 2017' เป็นวันที่สิ้นสุดฉันต้องการสร้างแถวต่อไปนี้: 2017-03-05 00:00:00, 1 2017-03-06 00:00:00, 1 ... 2017-04-11 00:00:00, 1 วิธีที่ดีที่สุดในการเขียนโค้ดของกระบวนงานที่เก็บไว้เพื่อทำสิ่งนี้คืออะไร ฉันใช้ SQL Server 2008 R2 ในสภาพแวดล้อมการทดสอบของฉัน แต่สภาพแวดล้อมจริงของเราใช้ SQL Server 2012 ดังนั้นฉันสามารถอัพเกรดเครื่องทดสอบของฉันได้หากมีฟังก์ชั่นใหม่ที่เปิดตัวในปี …

5
คำสั่ง DELETE ขัดแย้งกับข้อ จำกัด การอ้างอิง
ฉันกำลังพยายามลบผู้ใช้ทั้งหมด แต่ได้รับข้อผิดพลาด: Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_M02ArticlePersons_M06Persons". The conflict occurred in database "workdemo.no", table "dbo.M02ArticlePersons", column 'M06PersonId'. The statement has been terminated. แบบสอบถาม: DELETE FROM [workdemo.no].[dbo].[M06Persons] WHERE ID > '13' GO ดูเหมือนว่าฉันต้องใช้on delete cascade;แต่ฉันติดอยู่
11 sql-server  t-sql 

1
เลือก Supersets เท่านั้น
ฉันมีสองตาราง (พร้อมกับดัชนี nonclustered) ที่สามารถสร้างด้วยคำสั่งด้านล่าง: CREATE TABLE GroupTable ( GroupKey int NOT NULL PRIMARY KEY, RecordCount int NOT NULL, GroupScore float NOT NULL ); CREATE TABLE RecordTable ( RecordKey varchar(10) NOT NULL, GroupKey int NOT NULL, PRIMARY KEY(RecordKey, GroupKey) ); CREATE UNIQUE INDEX ixGroupRecord ON RecordTable(GroupKey, RecordKey); ในขณะที่ทางเทคนิคตารางของฉันแตกต่างกันเล็กน้อยและฉันกำลังเข้าร่วมในตารางอื่น ๆ ไม่กี่นี่เป็นพร็อกซีที่เหมาะสมสำหรับสถานการณ์ของฉัน ฉันต้องการเลือกทั้งหมดGroupKeysที่ไม่ใช่ชุดย่อยของอีกGroupKeyชุด …

4
รีเซ็ตผลรวมการรันตามคอลัมน์อื่น
กำลังพยายามคำนวณผลรวมสะสม แต่ควรรีเซ็ตเมื่อยอดรวมสะสมมากกว่าค่าคอลัมน์อื่น create table #reset_runn_total ( id int identity(1,1), val int, reset_val int, grp int ) insert into #reset_runn_total values (1,10,1), (8,12,1),(6,14,1),(5,10,1),(6,13,1),(3,11,1),(9,8,1),(10,12,1) SELECT Row_number()OVER(partition BY grp ORDER BY id)AS rn,* INTO #test FROM #reset_runn_total รายละเอียดดัชนี: CREATE UNIQUE CLUSTERED INDEX ix_load_reset_runn_total ON #test(rn, grp) ข้อมูลตัวอย่าง +----+-----+-----------+-----+ | id | val | …

6
ตัดช่องว่าง (ช่องว่างแท็บบรรทัดใหม่)
ฉันใช้ SQL Server 2014 และฉันต้องล้างช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของเนื้อหาคอลัมน์ซึ่งช่องว่างอาจเป็นช่องว่างแบบง่ายแท็บหรือการขึ้นบรรทัดใหม่ (ทั้ง\nและ\r\n) เช่น ' this content ' should become 'this content' ' \r\n \t\t\t this \r\n content \t \r\n ' should become 'this \r\n content' และอื่น ๆ ฉันสามารถทำได้เฉพาะกรณีแรกด้วย UPDATE table t SET t.column = LTRIM(RTRIM(t.column)) แต่สำหรับกรณีอื่น ๆ มันไม่ทำงาน

3
แทนที่อักขระพิเศษในคอลัมน์ด้วยช่องว่าง
ฉันกำลังพยายามเขียนคิวรีที่แทนที่อักขระพิเศษด้วยช่องว่าง โค้ดด้านล่างช่วยในการระบุแถว (อักขระตัวเลขและตัวอักษรจุลภาคและช่องว่างใช้ได้): SELECT columnA FROM tableA WHERE columnA like '%[^a-Z0-9, ]%' ฉันจะรวมฟังก์ชั่นแทนที่ในคำสั่ง select ได้อย่างไรเพื่อให้อักขระทั้งหมดที่ไม่ใช่ตัวอักษรและตัวเลขจุลภาคและช่องว่างในชุดผลลัพธ์ถูกแทนที่ด้วย '' (ช่องว่าง) อันนี้จะไม่ทำงาน: SELECT replace(columnA,'%[^a-Z0-9, ]%',' ') FROM tableA WHERE columnA like '%[^a-Z0-9, ]%'

4
FIRST () และ LAST () รุ่น SQL Server 2012 คืออะไร
ฉันมีตารางที่มีvalueคอลัมน์ ฉันต้องการคำนวณแถวสุดท้ายลบด้วยแถวแรกดังที่แสดงที่นี่: id value 1 10 2 45 3 65 4 95 . . . . . . 500 200 ฉันต้องการได้รับ 200 - 10 = 190 ฉันพยายามใช้คำสั่งด้านล่างใน SQL Server 2012 อย่างไรก็ตามLASTและFIRSTไม่ทำงาน SELECT LAST(Value) - FIRST(Value) FROM Counter; ไวยากรณ์สำหรับคำสั่งนี้ใน SQL Server คืออะไร

3
ดัชนีที่กรองจะใช้ก็ต่อเมื่อส่วนที่กรองอยู่ใน JOIN ไม่ใช่ WHERE
ฉันได้สร้างดัชนีที่กรองแล้วด้านล่าง แต่เมื่อฉันเรียกใช้ 2 คิวรีเพิ่มเติมลงดัชนีนี้จะถูกใช้สำหรับการค้นหาในตัวอย่างแรกที่มี END_DTTM ใน JOIN มากกว่าข้อที่ (นั่นคือข้อแตกต่างในแบบสอบถามเท่านั้น) . ใครช่วยอธิบายได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น การสร้างดัชนี CREATE NONCLUSTERED INDEX [ix_PATIENT_LIST_BESPOKE_LIST_ID_includes] ON [dbo].[PATIENT_LIST_BESPOKE] ( [LIST_ID] ASC, [END_DTTM] ASC ) WHERE ([END_DTTM] IS NULL) แบบสอบถาม DECLARE @LIST_ID INT = 3655 --This one seeks on the index SELECT PATIENT_LISTS.LIST_ID FROM DBO.PATIENT_LISTS LEFT JOIN DBO.PATIENT_LIST_BESPOKE ON PATIENT_LISTS.LIST_ID = …

3
sql server: อัพเดทฟิลด์บนโต๊ะขนาดใหญ่ในกลุ่มเล็ก ๆ : วิธีการรับความคืบหน้า / สถานะ?
เรามีตารางที่มีขนาดใหญ่มาก (100 ล้านแถว) และเราจำเป็นต้องอัปเดตเขตข้อมูลสองสามแห่ง สำหรับบันทึกการจัดส่ง ฯลฯ เรายังต้องการเก็บไว้ในธุรกรรมที่มีขนาดพอดี ด้านล่างจะทำเคล็ดลับหรือไม่ และเราจะให้มันพิมพ์ผลงานออกมาได้อย่างไรเพื่อเราจะได้เห็นความคืบหน้า? (เราพยายามเพิ่มคำสั่ง PRINT ในนั้น แต่ไม่มีสิ่งใดถูกส่งออกในขณะที่ลูป) รหัสคือ: DECLARE @CHUNK_SIZE int SET @CHUNK_SIZE = 10000 UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or deletedDate is null WHILE @@ROWCOUNT > 0 BEGIN UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = …
10 sql-server  t-sql 

1
TSQL เหตุใดจึงมีอันดับสูงสุดเร็วขึ้นด้วยตัวแปร
ทุกเช้า ฉันทำงานกับ sql ที่ซับซ้อนพอสมควรเพื่อ 'รับ' ข้อมูลบางอย่างจากฐานข้อมูลผลิตภัณฑ์ของบุคคลที่สามเพื่อแสดงในแอปพลิเคชันของเราเอง ฉันเพิ่มในรายการที่เลือกเพื่อรับระเบียนสูงสุดจากตารางภายในแบบสอบถามย่อย (ถ้ามีเหตุผล) แบบสอบถามใช้เวลาเกือบ 3 นาทีในการส่งคืนชุดผลลัพธ์สุดท้าย 100 รายการโดยใช้ SELECT TOP 1 ... ฉันดูออนไลน์เพื่อดูการปรับปรุงสิ่งที่ฉันพยายามบรรลุและขอแนะนำให้ฉันเปลี่ยนการเลือกของฉันเพื่อใช้ตัวแปรดังต่อไปนี้ DECLARE @topCount INT SET @topCount = 1 SELECT TOP (@topCount) ... นี่ใช้แบบสอบถามเดียวกันจาก 3 นาทีถึง 1 วินาทีซึ่งยอดเยี่ยมมาก! แต่ทุกคนสามารถอธิบายได้ว่าทำไมถึงเป็นเช่นนั้น
10 sql-server  t-sql 

1
เป็นวิธีที่ถูกต้องเพื่อให้แน่ใจว่ารายการที่ไม่ซ้ำกันในการออกแบบฐานข้อมูลชั่วคราวคืออะไร?
ฉันมีปัญหากับการออกแบบฐานข้อมูลชั่วคราว ฉันจำเป็นต้องรู้วิธีการตรวจสอบให้แน่ใจว่าฉันมีบันทึกการใช้งานเพียงหนึ่งเดียวสำหรับระยะเวลาที่กำหนดสำหรับร้านค้า ฉันได้อ่านคำตอบนี้แล้ว แต่ฉันเกรงว่าฉันไม่สามารถคาดหัวได้ว่าไกทำงานอย่างไร โดยเฉพาะอย่างยิ่งฉันจะทำงานที่กระตุ้นให้มีอยู่ของฉันที่ป้องกันการปรับปรุงเพื่อบันทึกและแทรกบันทึกใหม่แทน ปัญหาที่แท้จริงของฉันคือฉันไม่รู้วิธีป้องกัน Store จากวันที่มีผลมากกว่าหนึ่งวันเมื่อวันที่เสร็จสิ้นเป็นโมฆะ (เช่นป้องกันการบันทึก 2 รายการสำหรับร้านค้า) นี่คือสิ่งที่ฉันมี แต่มันช่วยให้ฉันสามารถแทรกบันทึกใหม่สำหรับร้านค้าที่มีวันที่มีประสิทธิภาพที่แตกต่างกัน นิยามของตาราง: /****** Object: Table [PCR].[Z_STORE_TEAM] Script Date: 05/09/2014 13:05:57 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U')) DROP TABLE [Z_STORE_TEAM] GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id …

3
วิธีแมปเซิร์ฟเวอร์อื่นผ่าน SQL Server Management Studio
ฉันพยายามแมปเซิร์ฟเวอร์อื่นโดยให้คำสั่ง EXEC xp_cmdshell 'NET USE H:\\568.256.8.358\backup_147 1234abc /USER:cranew /PERSISTENT:yes' ฉันพบข้อผิดพลาดกับสิ่งนี้: ไม่พบเส้นทางเครือข่าย แต่ฉันสามารถแมปเซิร์ฟเวอร์อื่นด้วยตนเองได้ โปรดช่วยฉันในการเรียงลำดับ

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