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

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

2
ความแตกต่างระหว่างโต๊ะ temp และตัวแปร table ใน SQL Server คืออะไร?
ดูเหมือนว่าจะเป็นพื้นที่ที่มีตำนานและมุมมองที่ขัดแย้งกันอยู่บ้าง ดังนั้นความแตกต่างระหว่างตัวแปรตารางและตารางชั่วคราวใน SQL Server คืออะไร?

6
กำลังดึงข้อมูลแถว n ต่อกลุ่ม
ฉันมักจะต้องเลือกจำนวนแถวจากแต่ละกลุ่มในชุดผลลัพธ์ ตัวอย่างเช่นฉันอาจต้องการแสดงมูลค่าการสั่งซื้อล่าสุด 'n' ที่สูงที่สุดหรือต่ำสุดต่อลูกค้า ในกรณีที่ซับซ้อนมากขึ้นจำนวนแถวที่จะแสดงอาจแตกต่างกันไปในแต่ละกลุ่ม (กำหนดโดยแอตทริบิวต์ของการจัดกลุ่ม / ระเบียนหลัก) ส่วนนี้เป็นทางเลือก / สำหรับเครดิตเพิ่มเติมและไม่ได้มีเจตนาเพื่อห้ามไม่ให้คนตอบรับ ตัวเลือกหลักสำหรับการแก้ไขปัญหาประเภทนี้ใน SQL Server 2005 และรุ่นที่ใหม่กว่าคืออะไร อะไรคือข้อดีและข้อเสียหลักของแต่ละวิธี? ตัวอย่าง AdventureWorks (เพื่อความชัดเจนและเป็นตัวเลือก) แสดงวันที่ล่าสุดของการทำธุรกรรมห้าครั้งและรหัสจากTransactionHistoryตารางสำหรับแต่ละผลิตภัณฑ์ที่เริ่มต้นด้วยตัวอักษรจาก M ถึง R เหมือนกันอีกครั้ง แต่มีnบรรทัดประวัติต่อผลิตภัณฑ์โดยที่nห้าเท่าของDaysToManufactureแอตทริบิวต์ผลิตภัณฑ์ เดียวกันสำหรับกรณีพิเศษที่ว่าเส้นหนึ่งของประวัติศาสตร์ที่ต่อผลิตภัณฑ์เป็นสิ่งจำเป็น (เดี่ยวรายการล่าสุดโดยผูกทำลายบนTransactionDateTransactionID

1
รวมส่วนย่อยของตารางเป้าหมาย
ฉันกำลังพยายามใช้MERGEคำสั่งเพื่อแทรกหรือลบแถวออกจากตาราง แต่ฉันต้องการดำเนินการกับชุดย่อยของแถวเหล่านั้นเท่านั้น เอกสารสำหรับMERGEคำเตือนที่มีคำพูดค่อนข้างแรง: สิ่งสำคัญคือต้องระบุเฉพาะคอลัมน์จากตารางเป้าหมายที่ใช้สำหรับจุดประสงค์ที่ตรงกัน นั่นคือระบุคอลัมน์จากตารางเป้าหมายที่เปรียบเทียบกับคอลัมน์ที่เกี่ยวข้องของตารางต้นฉบับ อย่าพยายามปรับปรุงประสิทธิภาพการสืบค้นด้วยการกรองแถวในตารางเป้าหมายในส่วนคำสั่ง ON เช่นโดยระบุ AND NOT target_table.column_x = value การทำเช่นนั้นอาจส่งคืนผลลัพธ์ที่ไม่คาดคิดและไม่ถูกต้อง แต่นี่คือสิ่งที่ฉันต้องทำเพื่อให้MERGEงานของฉันปรากฏ ข้อมูลที่ฉันมีคือตารางการเข้าร่วมหลายต่อหลายมาตรฐานสำหรับหมวดหมู่ (เช่นรายการที่รวมอยู่ในหมวดหมู่ใด) ดังนี้: CategoryId ItemId ========== ====== 1 1 1 2 1 3 2 1 2 3 3 5 3 6 4 5 สิ่งที่ฉันต้องทำคือการแทนที่แถวทั้งหมดในหมวดหมู่เฉพาะด้วยรายการใหม่ ความพยายามครั้งแรกของฉันในการทำเช่นนี้ดูเหมือนว่า: MERGE INTO CategoryItem AS TARGET USING ( SELECT ItemId FROM …

6
ผลรวมสะสมช่วงวันที่โดยใช้ฟังก์ชั่นหน้าต่าง
ฉันต้องคำนวณผลรวมสะสมในช่วงวันที่ เพื่อแสดงให้เห็นถึงการใช้ฐานข้อมูลตัวอย่าง AdventureWorksไวยากรณ์สมมุติฐานต่อไปนี้จะทำสิ่งที่ฉันต้องการ: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = SUM(TH.ActualCost) OVER ( PARTITION BY TH.ProductID ORDER BY TH.TransactionDate RANGE BETWEEN INTERVAL 45 DAY PRECEDING AND CURRENT ROW) FROM Production.TransactionHistory AS TH ORDER BY TH.ProductID, TH.TransactionDate, TH.ReferenceOrderID; น่าเศร้าที่RANGEขนาดของกรอบหน้าต่างไม่อนุญาตให้มีช่วงเวลาใน SQL Server ฉันรู้ว่าฉันสามารถเขียนวิธีการใช้แบบสอบถามย่อยและการรวมปกติ (ไม่ใช่หน้าต่าง): SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = ( SELECT SUM(TH2.ActualCost) …

2
วิธีสร้างพารามิเตอร์ Unicode และชื่อตัวแปร
งานทั้งหมดนี้: CREATE DATABASE [¯\_(ツ)_/¯]; GO USE [¯\_(ツ)_/¯]; GO CREATE SCHEMA [¯\_(ツ)_/¯]; GO CREATE TABLE [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯] NVARCHAR(20)); GO CREATE UNIQUE CLUSTERED INDEX [¯\_(ツ)_/¯] ON [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]); GO INSERT INTO [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]) VALUES (N'[¯\_(ツ)_/¯]'); GO CREATE VIEW [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]; GO CREATE PROC [¯\_(ツ)_/¯].[sp_¯\_(ツ)_/¯] @Shrug NVARCHAR(20) AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] …

4
วิธีที่ง่ายที่สุดในการสร้างตารางชั่วคราวใน SQL Server ที่สามารถเก็บผลลัพธ์ของกระบวนงานที่เก็บไว้คืออะไร
หลายครั้งที่ฉันต้องเขียนสิ่งต่อไปนี้เมื่อต้องจัดการกับ SQL Server create table #table_name ( column1 int, column2 varchar(200) ... ) insert into #table_name execute some_stored_procedure; แต่สร้างตารางที่มีไวยากรณ์ที่แน่นอนเนื่องจากผลลัพธ์ของกระบวนงานที่เก็บไว้เป็นงานที่น่าเบื่อ ตัวอย่างเช่นผลลัพธ์ของsp_helppublicationมี 48 คอลัมน์! ฉันต้องการทราบว่ามีวิธีง่ายๆในการทำเช่นนี้หรือไม่ ขอบคุณ

5
คำสั่ง SQL Server CASE ประเมินเงื่อนไขทั้งหมดหรือออกจากเงื่อนไขแรกของ TRUE หรือไม่
คำสั่ง SQL Server (2008 หรือ 2012 โดยเฉพาะ) CASEประเมินWHENเงื่อนไขทั้งหมดหรือไม่หรือออกเมื่อพบWHENประโยคที่ประเมินว่าเป็นจริงหรือไม่? หากผ่านเงื่อนไขทั้งชุดนั่นหมายความว่าเงื่อนไขสุดท้ายที่ประเมินเป็นจริงจะเขียนทับเงื่อนไขแรกที่ประเมินว่าเป็นจริงหรือไม่ ตัวอย่างเช่น: SELECT CASE WHEN 1+1 = 2 THEN'YES' WHEN 1+1 = 3 THEN 'NO' WHEN 1+1 = 2 THEN 'NO' END ผลลัพธ์คือ "ใช่" แม้ว่าเงื่อนไขสุดท้ายควรประเมินเป็น "ไม่" ดูเหมือนว่ามันจะออกเมื่อพบเงื่อนไขที่แท้จริง ใครบางคนได้โปรดยืนยันถ้าเป็นกรณีนี้
44 sql-server  t-sql  case 

9
ขอให้ไม่ใช้ธุรกรรมและใช้วิธีแก้ปัญหาเพื่อจำลองสถานการณ์หนึ่ง
ฉันได้พัฒนา T-SQL มาหลายปีแล้วและกำลังขุดอยู่เสมอและเรียนรู้ทุกอย่างที่เกี่ยวกับภาษาได้อย่างต่อเนื่อง ฉันเพิ่งเริ่มทำงานกับ บริษัท ใหม่และได้รับสิ่งที่ฉันคิดว่าเป็นข้อเสนอแนะแปลก ๆ เกี่ยวกับการทำธุรกรรม ไม่เคยใช้พวกเขา ใช้วิธีแก้ปัญหาที่จำลองธุรกรรมแทน นี่มาจาก DBA ของเราที่ทำงานในฐานข้อมูลเดียวกับธุรกรรมจำนวนมากและต่อมามีการบล็อกจำนวนมาก ฐานข้อมูลที่ฉันทำงานเป็นหลักไม่ประสบปัญหานี้และฉันเห็นว่ามีการใช้ธุรกรรมในอดีต ฉันเข้าใจว่าการปิดกั้นเป็นสิ่งที่คาดว่าจะเกิดขึ้นเนื่องจากเป็นไปตามปกติของพวกเขาและถ้าคุณสามารถหลีกเลี่ยงได้โดยไม่ต้องใช้สิ่งใดสิ่งหนึ่ง แต่ฉันมีหลายครั้งที่แต่ละคำสั่งต้องทำงานสำเร็จ หากล้มเหลวพวกเขาทั้งหมดจะต้องล้มเหลวในการกระทำ ฉันรักษาขอบเขตการทำธุรกรรมของฉันให้แคบที่สุดเสมอใช้ร่วมกับ SET XACT_ABORT ON เสมอและอยู่ในการทดลอง / จับ ตัวอย่าง: CREATE SCHEMA someschema; GO CREATE TABLE someschema.tableA (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColA VARCHAR(10) NOT NULL ); GO CREATE TABLE someschema.tableB (id …

8
การเขียนผลลัพธ์ที่เลือกไปยังไฟล์ csv
เราจำเป็นต้องเขียนผลลัพธ์การสืบค้น SELECT ลงในไฟล์ csv จะใช้ T-SQL ใน SQL Server 2008 r2 ได้อย่างไร ฉันรู้ว่ามันสามารถทำได้ใน SSIS แต่ด้วยเหตุผลบางอย่างเราไม่มีตัวเลือกนี้ ฉันพยายามใช้ proc ที่แนะนำในบทความด้านล่าง แต่เมื่อฉันเรียกใช้ proc, SQL บ่นว่าไม่สามารถเรียกใช้ sys.sp_OACreate และ sys.sp_OADestroy ที่เรียกว่าใน proc นี้ คุณรู้วิธีที่เราสามารถเปิดส่วนประกอบเหล่านี้หรือรู้วิธีการเขียนไฟล์โดยใช้ T-SQL ขอบคุณล่วงหน้า.

1
GO หลังจากทุกคำสั่ง T-SQL
เหตุผลเบื้องหลังการใช้คำสั่ง GO หลังจากทุกคำสั่ง SQL คืออะไร ฉันเข้าใจว่า GO ส่งสัญญาณการสิ้นสุดของแบทช์และ / หรืออนุญาตให้มีชื่อเสียงของข้อความ แต่สิ่งที่มันมีประโยชน์ใช้หลังจากทุกคำสั่ง ฉันแค่อยากรู้อยากเห็นเป็นเอกสาร Microsoft จำนวนมาก ฯลฯ ได้เริ่มใช้มันหลังจากทุกคำสั่งหรือบางทีฉันเพิ่งเริ่มสังเกตเห็น นอกจากนี้สิ่งที่ถือว่าเป็นแนวปฏิบัติที่ดีที่สุด

3
วิ่งรวมกับการนับ?
ตามชื่อเรื่องแนะนำว่าฉันต้องการความช่วยเหลือในการหาผลรวมสะสมใน T-SQL ปัญหาคือผลรวมที่ฉันต้องทำคือผลรวมของการนับ: sum(count (distinct (customers))) พูดถ้าฉันวิ่งนับคนเดียวผลลัพธ์จะเป็น: Day | CountCustomers ---------------------- 5/1 | 1 5/2 | 0 5/3 | 5 ฉันต้องการผลลัพธ์ที่มีผลรวมเป็น: Day | RunningTotalCustomers ---------------------- 5/1 | 1 5/2 | 1 5/3 | 6 ฉันใช้ผลรวมทั้งหมดก่อนใช้coalesceวิธีการ แต่ไม่นับด้วย ฉันไม่แน่ใจว่าจะทำอย่างไรตอนนี้ที่ฉันมีการนับ
34 sql-server  t-sql 

3
ตารางที่มีค่าพารามิเตอร์เป็นพารามิเตอร์ผลลัพธ์สำหรับกระบวนงานที่เก็บไว้
มันเป็นไปได้ที่จะใช้พารามิเตอร์ที่มีมูลค่าเป็นตารางสำหรับพารามิเตอร์ขาออกสำหรับกระบวนงานที่เก็บไว้หรือไม่ นี่คือสิ่งที่ฉันต้องการทำในรหัส /*First I create MY type */ CREATE TYPE typ_test AS TABLE ( id int not null ,name varchar(50) not null ,value varchar(50) not null PRIMARY KEY (id) ) GO --Now I want to create stored procedu whic is going to send output type I created, --But it looks …

7
ฉันจะทราบได้อย่างไรว่าฐานข้อมูล SQL Server ยังคงถูกใช้อยู่
เรากำลังมองหาการรื้อถอนอินสแตนซ์ของ SQL Server ที่ยังมีฐานข้อมูลอยู่สองสามตัว ฉันจะรู้ได้อย่างไรว่าผู้ใช้หรือแอปพลิเคชันเว็บยังคงใช้งานอยู่หรือไม่ ฉันพบเธรดฟอรัมซึ่งมีเคียวรี T-SQL ที่คุณสามารถเรียกใช้เพื่อดึงวันที่สืบค้นล่าสุด ดูเหมือนว่าจะใช้งานได้ แต่ฉันต้องการทราบว่าข้อมูลนี้ถูกต้องเพียงพอที่จะลบฐานข้อมูลหรือไม่ ใช่ไหม? หากคุณมีวิธีการอื่นที่จะช่วยเช่นกัน
33 sql-server  t-sql 

5
ผู้ประกอบการเชิงตรรกะหรือและในสภาพและคำสั่งของเงื่อนไขในที่
ตรวจสอบข้อความทั้งสองนี้: IF (CONDITION 1) OR (CONDITION 2) ... IF (CONDITION 3) AND (CONDITION 4) ... ถ้าCONDITION 1เป็นTRUEจะCONDITION 2ถูกตรวจสอบ? ถ้าCONDITION 3เป็นFALSEจะCONDITION 4ถูกตรวจสอบ? สิ่งที่เกี่ยวกับเงื่อนไขWHERE: เครื่องยนต์ SQL Server ปรับเงื่อนไขทั้งหมดในWHEREข้อ? โปรแกรมเมอร์ควรวางเงื่อนไขในลำดับที่ถูกต้องเพื่อให้แน่ใจว่าเครื่องมือเพิ่มประสิทธิภาพ SQL Server แก้ไขได้อย่างถูกต้องหรือไม่? เพิ่ม: ขอบคุณแจ็คสำหรับลิงก์แปลกใจจากรหัส t-sql: IF 1/0 = 1 OR 1 = 1 SELECT 'True' AS result ELSE SELECT 'False' AS result …

1
ทำไมความเร็วในการดำเนินการคำสั่งขึ้นอยู่กับการเชื่อมต่อเครือข่าย?
ดูเหมือนว่าความเร็วในการดำเนินการ T-SQL นั้นขึ้นอยู่กับเวลาแฝงของการเชื่อมต่อเครือข่ายกับเซิร์ฟเวอร์ ฉันสันนิษฐานว่าถ้า SQL Server ไม่มีอะไรจะรายงานกลับไปยังไคลเอนต์เกี่ยวกับมันก็จะดำเนินไปจนกว่าจะเสร็จ แต่การทดสอบแสดงให้เห็นอีกเรื่องหนึ่ง create procedure UselessLoop @I int as declare @D datetime = getdate() while @I > 0 set @I -= 1 print datediff(millisecond, @D, getdate()) exec UselessLoop 100000 Server Milliseconds local 53 nearby 63 faraway 660 exec UselessLoop 1000000 Server Milliseconds local 546 nearby …
31 sql-server  t-sql 

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