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

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

2
ช่วยด้วยแบบสอบถาม PIVOT
ฉันมีตารางที่มีโครงสร้างด้านล่าง: CREATE TABLE [dbo].[AUDIT_SCHEMA_VERSION]( [SCHEMA_VER_MAJOR] [int] NOT NULL, [SCHEMA_VER_MINOR] [int] NOT NULL, [SCHEMA_VER_SUB] [int] NOT NULL, [SCHEMA_VER_DATE] [datetime] NOT NULL, [SCHEMA_VER_REMARK] [varchar](250) NULL ); ข้อมูลตัวอย่างบางส่วน (ดูเหมือนจะมีปัญหากับ sqlfiddle .. ดังนั้นควรใส่ข้อมูลตัวอย่างบางส่วน): INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) …

2
MERGE ใช้ tempdb หรือไม่
พิจารณาคำถามต่อไปนี้: MERGE [Parameter] with (rowlock) AS target USING (SELECT @AreaId, @ParameterTypeId, @Value) AS source (AreaId, ParameterTypeId, Value) ON (target.AreaId = source.AreaId AND target.ParameterTypeId = source.ParameterTypeId) WHEN MATCHED THEN UPDATE SET target.Value = source.Value, @UpdatedId = target.Id WHEN NOT MATCHED THEN INSERT ([AreaId], [ParameterTypeId], [Value]) VALUES (source.AreaId, source.ParameterTypeId, source.Value); สถิติ I …
12 sql-server  t-sql 

2
มีความแตกต่างระหว่างการวางนามแฝงคอลัมน์ที่จุดเริ่มต้นหรือจุดสิ้นสุดของคำนิยามคอลัมน์หรือไม่?
ฉันเคยเห็นและเขียนชื่อแทนคอลัมน์เป็นเสมอ SELECT 1 as ColumnName แต่วันนี้เจอคำถามที่ใช้ SELECT ColumnName = 1 มีความแตกต่างในวิธีการเรียกใช้แบบสอบถามทั้งสองนี้อย่างไร หรือมีมาตรฐานในกลุ่ม DBA เกี่ยวกับอันไหนที่จะใช้? ส่วนตัวผมคิดว่า 2 จะง่ายต่อการอ่าน / รักษาสำหรับคำจำกัดความคอลัมน์อีกต่อไป (ตัวอย่างที่ดีที่นี่จากบทความนี้ ) แต่ผมไม่เคยเห็นไวยากรณ์ที่ 2 ก่อนที่จะนำมาใช้ในวันนี้เพื่อให้กำลังสงสัยว่าถ้ามีเหตุผลบางอย่างที่ฉันไม่ควรจะเป็น ใช้มัน

4
SQL Server 2012 กำลังวาง [วงเล็บ] ไว้รอบ ๆ ชื่อตารางและคอลัมน์
เมื่อคุณลากโฟลเดอร์คอลัมน์ไปยังหน้าต่างแก้ไขรายการทั้งหมดของคอลัมน์จะถูกเพิ่มโดยไม่มีวงเล็บ หากคุณลากคอลัมน์ทีละรายการพวกเขามีวงเล็บ อย่างไรก็ตามมีการปิดใช้งานหรือไม่ ฉันไม่สามารถหาอะไรในตัวเลือกและพวกเขาเป็นสิ่งที่ทำให้ไขว้เขว

3
SQL Server เก็บข้อมูลในคุณสมบัติกำหนดการงานอย่างไร
ฉันรู้ว่ามีSELECT * FROM msdb..sysjobschedulesแต่ที่เพิ่งแสดงให้เห็นในครั้งต่อไปที่งานมีกำหนดให้ทำงาน ฉันต้องการทราบว่าทั้งหมดนี้ถูกกำหนดและจัดเก็บอย่างไร ดังนั้นมันจะเก็บค่าของ Recurs ทุกวันจันทร์ที่ไหน
12 sql-server  t-sql  jobs 

1
การสร้างสตริงขนาดใหญ่สำหรับข้อมูลการทดสอบ
ผมได้รับเมื่อเร็ว ๆ นี้พยายามที่จะสร้างบางสายขนาดใหญ่ที่มีข้อมูลการทดสอบทั่วไปสำหรับคำถามที่นี่ ดูเหมือนว่าฉันเคยรู้วิธีการคูณสตริง อย่างไรก็ตามฉันไม่สามารถจำไวยากรณ์ได้อีก ฉันกำลังมองหาสิ่งที่ชอบ: SELECT 'A' + ('a' * 1000) + 'ha!' มากับ "Aaaaaaaaaaaaaaaha!" (แน่นอนอีกต่อไปแน่นอน) เป็นไปได้ใน T-SQL? (หรือฉันกำลังคิดถึงภาษาอื่นบ้าง) นอกจากนี้มีเทคนิคอื่น ๆ ในการสร้างสตริงจำนวนมากหรือไม่
12 sql-server  t-sql 

5
ฉันจะ จำกัด ขั้นตอนการจัดเก็บ SQL ที่จะเรียกใช้ครั้งละหนึ่งคนได้อย่างไร
ฉันมีขั้นตอนการจัดเก็บที่โดยทั่วไปจะเลือกค่าจากตารางหนึ่งและแทรกลงในอีกตารางหนึ่งซึ่งเป็นการจัดเก็บลงสื่อถาวร ฉันต้องการหลีกเลี่ยงคนหลายคนไม่ให้ทำเช่นนั้นในเวลาเดียวกัน ในขณะที่กระบวนการนี้กำลังทำงานอยู่ฉันไม่ต้องการให้คนอื่นเริ่มต้นได้ แต่ฉันไม่ต้องการให้มีการทำให้เป็นอนุกรม สิ่งที่ฉันต้องการสำหรับบุคคลอื่นที่พยายามเริ่มต้นเพื่อรับข้อผิดพลาดในขณะที่ฉันกำลังเรียกใช้กระบวนการ ฉันได้ลองใช้ sp_getapplock แล้ว แต่ฉันไม่สามารถจัดการเพื่อห้ามไม่ให้บุคคลนั้นเรียกใช้โพรซีเดอร์ได้ ฉันพยายามค้นหาโพรซีเดอร์ด้วย sys.dm_exec_requests และบล็อกโพรซีเดอร์ในขณะที่มันใช้งานได้ฉันคิดว่ามันไม่เหมาะสมเพราะในบางเซิร์ฟเวอร์ฉันไม่ได้รับอนุญาตให้เรียกใช้ sys.dm_exec_sql_text (sql_handle) วิธีที่ดีที่สุดสำหรับฉันที่จะทำคืออะไร?

4
มีฟังก์ชั่นในตัว (ซ่อนไว้) บน MS-SQL เพื่อยกเลิกการอ้างชื่อวัตถุหรือไม่?
บางครั้งฉันเก็บชื่อวัตถุ (ตัวระบุ) ในฐานข้อมูลของเราเช่นในตารางพารามิเตอร์บางตัว เพราะผมเลือกระเบียนจากตารางเหล่านี้โดยใช้ '=' หรือ 'LIKE' ดำเนินการเปรียบเทียบผมจะต้องดูแลเพื่อเก็บชื่อเหล่านี้มักจะมีหรือไม่มีวงเล็บ IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = '[TABLE_NAME]'; หรือ IF EXISTS (SELECT 1 FROM MYTABLE WHERE OBJ_NAME = 'TABLE_NAME'; อย่างไรก็ตาม MS-SQL มีฟังก์ชั่นบางอย่างที่คุณสามารถใช้ชื่อวัตถุที่มีหรือไม่มีวงเล็บตัวอย่างเช่นฟังก์ชัน OBJECT_ID () ฉันได้ตั้งค่าตัวอย่างน้อยที่สุดในdbfiddle.uk CREATE TABLE TEST ( ID INT IDENTITY(1,1) PRIMARY KEY, OBJECT sysname NOT NULL ); GO …
12 sql-server  t-sql 

2
การทำธุรกรรมในขั้นตอนการจัดเก็บ
ฉันต้องการดำเนินการ UPDATE และ INSERT ในธุรกรรมเดียว รหัสนั้นทำงานได้ดีในตัวของมันเอง แต่ฉันต้องการที่จะสามารถเรียกมันได้อย่างง่ายดายและผ่านพารามิเตอร์ที่ต้องการ เมื่อฉันพยายามทำธุรกรรมนี้ในขั้นตอนการจัดเก็บฉันพบข้อผิดพลาดทางไวยากรณ์มากมาย ฉันจะแค็ปซูลโค้ดต่อไปนี้เพื่อให้สามารถเรียกได้อย่างง่ายดาย? BEGIN TRANSACTION AssignUserToTicket GO DECLARE @updateAuthor varchar(100) DECLARE @assignedUser varchar(100) DECLARE @ticketID bigint SET @updateAuthor = 'user1' SET @assignedUser = 'user2' SET @ticketID = 123456 UPDATE tblTicket SET ticketAssignedUserSamAccountName = @assignedUser WHERE (ticketID = @ticketID); INSERT INTO [dbo].[tblTicketUpdate] ([ticketID] ,[updateDetail] ,[updateDateTime] …

3
จัดกลุ่มระเบียนตามช่วงเวลา
ฉันมีตารางที่มีสคีมาดังต่อไปนี้และฉันต้องการกำหนดคิวรีที่สามารถจัดกลุ่มข้อมูลตามช่วงเวลา ( เช่นเรคคอร์ดต่อนาที ) จากนั้นให้ผลรวมของการเปลี่ยนแปลง SnapShotValue ตั้งแต่กลุ่มก่อนหน้า ในปัจจุบัน SnapShotValue เพิ่มขึ้นเรื่อย ๆ ดังนั้นฉันจึงต้องการเพียงผลรวมของความแตกต่าง ใครสามารถช่วยกับแบบสอบถาม SQL Server T-SQL ที่อาจทำเช่นนี้? ฉันเปิดให้เปลี่ยนสคีมา แต่นี่คือสิ่งที่ฉันมีอยู่ในปัจจุบัน schema CaptureTime (datetime) SnapShotValue (int) ข้อมูลตัวอย่าง 1 Jan 2012 00:00:00, 100 1 Jan 2012 00:00:30, 125 1 Jan 2012 00:01:00, 200 1 Jan 2012 00:01:30, 300 1 Jan 2012 00:02:15, 400 …

1
แทรกผลลัพธ์จากกระบวนงานที่เก็บไว้ในตัวแปรตาราง
ฉันมีขั้นตอนการจัดเก็บที่เก็บค่าในตัวแปรตาราง ฉันเลือกค่าเหล่านี้และส่งคืนเมื่อเรียกใช้โพรซีเดอร์ ฉันกำลังพยายามตั้งค่าส่งคืนเหล่านี้ในตัวแปรตารางอื่น แต่ฉันไม่สามารถหามันได้ ขั้นตอนการเก็บ ALTER PROCEDURE [dbo].[GetOrSetDomainId] @DomainName varchar(50), @DomainUrl varchar(50) AS BEGIN DECLARE @DomainId bigint; DECLARE @NumberOfRwos bigint; DECLARE @DomainHistory TABLE ( DomainId bigint, HasHistory bit, ServerOnline bit, DatabaseOnline bit, ServerPerformance bigint, DatabasePerformance bigint, SoldTickets bigint ) SELECT @NumberOfRwos = COUNT(Id) FROM DomainData WHERE DomainName = @DomainName OR …

2
ฉันจะแมปเข้าสู่ระบบฐานข้อมูลโดยใช้ T-SQL (ไม่ใช่ SSMS) ได้อย่างไร
ฉันกำลังเขียนโปรแกรมที่กำหนดให้ฉันต้องกำหนดสิทธิ์ทั้งหมดและทุกอย่างเป็นรหัส ฉันติดค้างอยู่ในส่วนนี้: ฉันแค่ต้องการทำเทียบเท่ากับการคลิกกล่องเล็ก ๆ ใต้ "แผนที่" สำหรับฐานข้อมูล msdb และกำหนดผู้ใช้นั้นให้กับบทบาท SqlAgentUser ฉันต้องการให้ผู้ใช้งานสามารถเพิ่ม / แก้ไขงาน SQL Server Agent ได้ ฉันสามารถตั้งค่าได้อย่างถูกต้องโดยใช้ SSMS แต่ฉันทำไม่ได้ตลอดชีวิตว่าจะทำอย่างไรใน SQL แบบดิบ ฉันค้นหาALTER LOGIN แล้วแต่ไม่เห็นสิ่งใดที่ต้องการ ฉันสงสัยว่าฉันไม่ทราบเงื่อนไขที่ถูกต้องสำหรับ Google ปกติฉันจะไม่ทำสิ่งนี้ ความช่วยเหลือใด ๆ ที่ชื่นชมมาก!

4
แสดงรายการงานตารางเวลาและชุดข้อมูลการเรียกใช้ที่กำหนดเวลาไว้ถัดไป
แสดงรายการงานตารางเวลาและชุดข้อมูลการเรียกใช้ที่กำหนดเวลาไว้ถัดไป ฉันกำลังพยายามแสดงรายการงานตารางเวลาและกำหนดการเรียกใช้ชุดข้อมูลต่อไป อย่างไรก็ตามฉันดูเหมือนจะไม่ประสบความสำเร็จ sysjobactivity มี next_scheduled_run_date ซึ่งเป็นสิ่งที่ฉันต้องการ แต่ฉันไม่สามารถคิดออกเพื่อเชื่อมต่อกับทั้งงานและกำหนดการ หากมีวิธีอื่นนอกเหนือจากผ่านsysjobactivityโปรดแนะนำฉันไปที่นั่น SELECT sj.name AS jobName , ss.name AS scheduleName , sja.next_scheduled_run_date FROM msdb.dbo.sysjobs sj INNER JOIN msdb.dbo.sysjobactivity sja ON sja.job_id = sj.job_id INNER JOIN msdb.dbo.sysjobschedules sjs ON sjs.job_id = sja.job_id INNER JOIN msdb.dbo.sysschedules ss ON ss.schedule_id = sjs.schedule_id WHERE (sj.name LIKE 'xray%') …

3
แปลงค่าตัวเลขสตริงด้วยเครื่องหมายจุลภาคเป็นตัวคั่นทศนิยมเป็น NUMERIC (10, 2)
ฉันมีตาราง SQL ของคอลัมน์ varchar ซึ่งมีตัวเลขที่จัดรูปแบบกรีก (. เป็นตัวคั่นหลักพันและเครื่องหมายจุลภาคเป็นตัวคั่นทศนิยม) การแปลงแบบคลาสสิก CONVERT(numeric(10,2),REPLACE([value],',','.')) ไม่ทำงานเพราะ (ตัวคั่นหลักพัน) ฆ่าการแปลง เช่นลอง CONVERT(numeric(10,2),REPLACE('7.000,45',',','.')) ฉันต้องการแปลงค่าดังกล่าวเป็นตัวเลข (10,2) ข้อเสนอแนะใด ๆ ของวิธีการจัดการมันได้หรือไม่

1
เราสามารถใส่เครื่องหมายเท่ากับ (=) หลังจากฟังก์ชั่นรวมใน Transact-SQL ได้หรือไม่?
ฉันได้พบสคริปต์เช่นนี้: set @sum = sum = (case when somecol1 is null then DATEDIFF(d,[somecol2],somecol3) else 0 end) ฉันไม่เข้าใจความหมายของเครื่องหมายเท่ากับ (=) หลังจากรวมคำหลักที่สอง เมื่อฉันเรียกใช้แบบสอบถามจะไม่แสดงข้อผิดพลาดใด ๆ ทั้งที่มีเครื่องหมายเท่ากับและไม่มี sumฉันต้องการที่จะทราบวัตถุประสงค์ของการวางเครื่องหมายเท่ากับหลังจากคำหลัก นั่นเป็นความผิดพลาดหรือไม่? ขอบคุณ

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