T-SQL变量

时间:2015-08-18 21:15:37

标签: sql sql-server tsql

如果我想在同一批次中从多个查询中引用我的行集,我可以使用哪种类型的对象(在T-SQL中)?

我正在强调同一批次。

非常感谢

4 个答案:

答案 0 :(得分:1)

创建临时表变量并插入其中。

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

答案 1 :(得分:0)

我不清楚,但您可以使用批量插入或批量更新来处理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

答案 2 :(得分:0)

问题对我来说并不完全清楚,但一种方法是使用is来实现"会话中的数据。表:

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

UNIQUEIDENTITIER是最简单的选择,但不是最快的(大键)。否则,可以使用SEQUENCE(SQL2012 +)。

  1. 生成会话标识符
  2. 需要处理数据的查询会收到此标识符并使​​用它过滤数据。
  3. 该解决方案允许多个作家和读者在同一时间"
  4. 表删除(截断)可以在系统停机期间(如果可能)完成,以最大限度地减少删除影响(删除操作繁重且locks the entire table
  5. 使用INSERT .. SELECT:

    获取数据生成
    INSERT INTO SessionTable
    (SessionId, Col1, Col2, ... , Coln)
    SELECT @SessionId, ....
    FROM <various sources>
    

    缺点:

    1. 表已实现,并且SELECT权限所有人均可访问。如果处理敏感数据,则必须处理安全性(DENY)。

    2. 表必须显式截断/删除(临时表和表变量会自动删除)

答案 3 :(得分:-1)

您可能希望使用Global Temp表,因为它具有当前会话之外的作用域,但是只有在有会话访问它时才会被警告它。