簡體   English   中英

T-SQL變量

[英]T-SQL Variables

如果要引用同一批中多個查詢的行集,可以使用哪種類型的對象(在T-SQL中)?

我要強調的是同一批。

非常感謝

創建一個臨時表變量並將其插入。

DECLARE @TempCustomer TABLE
(
   CustomerId uniqueidentifier,
   FirstName nvarchar(100),
   LastName nvarchar(100),
   Email nvarchar(100)
);
INSERT INTO 
    @TempCustomer 
SELECT 
    CustomerId, 
    FirstName, 
    LastName, 
    Email 
FROM 
    Customer
WHERE 
    CustomerId = @CustomerId

對我來說還不夠清楚,但是您可以使用批量插入或批量更新來處理multiplus結果。

對於INSERT,您可以執行SELECT來精確返回要插入到另一個表中的字段,例如...

INSERT INTO TableA (ID, Name, Phone) SELECT CustomerID, CustomerName, CustomerPhone FROM TableB

要進行更新,請意識到您的TableA帶有“客戶”,可以使用TableB信息進行更新,然后您可以...

UPDATE TableA SET TableA.Phone=TableB.Phone FROM TableB WHERE TableA.CustomerID=TableB.CustomerID

這個問題對我來說還不是很清楚,但是一種使用方式是在“會話”表中實現數據:

SessionId - UNIQUEIDENTIFIER is one option
Col1
Col2
...
Coln

UNIQUEIDENTITIER是最簡單的選項,但不是最快的(大鍵)。 否則,可以使用SEQUENCE (SQL2012 +)。

  1. 生成會話標識符
  2. 需要處理數據的查詢會收到此標識符並使​​用它過濾數據。
  3. 該解決方案允許“同時”多個作者和讀者
  4. 可以在系統停機期間(如果可能)完成表刪除(截斷)操作,以最大程度地減少刪除影響(刪除是一項繁重的操作,並且會鎖定整個表

使用INSERT .. SELECT:獲得數據生成INSERT .. SELECT:

INSERT INTO SessionTable
(SessionId, Col1, Col2, ... , Coln)
SELECT @SessionId, ....
FROM <various sources>

缺點:

  1. 該表已實現,具有SELECT權限的每個人都可以訪問。 如果處理了敏感數據,則必須處理安全性( DENY )。

  2. 必須顯式截斷/刪除表(臨時表和表變量將自動刪除)

您可能要使用Global Temp表,因為該表的范圍超出了當前會話的范圍,但是警告它僅在有會話訪問它時可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM