T-SQL变量

T-SQL变量,sql,sql-server,tsql,Sql,Sql Server,Tsql,如果要引用同一批中多个查询的行集,我可以在T-SQL中使用什么类型的对象 我强调的是同一批 非常感谢您创建一个临时表变量并插入其中 DECLARE @TempCustomer TABLE ( CustomerId uniqueidentifier, FirstName nvarchar(100), LastName nvarchar(100), Email nvarchar(100) ); INSERT INTO @TempCustomer SELECT

如果要引用同一批中多个查询的行集,我可以在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

您可能希望使用全局临时表,因为它的作用域在当前会话之外,但请注意,它仅在有会话访问它时才可用

我还不清楚,但您可以使用批量插入或批量更新来处理多线程结果

要插入,您可以执行选择操作,精确返回要插入到另一个表中的字段,如

在表格中插入ID、姓名、电话 选择CustomerID、CustomerName、CustomerPhone 从表B

要更新,请意识到您有一个带有“客户”的表格,该表格将使用表格B信息进行更新,然后您可以

更新表a 设置TableA.Phone=TableB.Phone 从表B 其中TableA.CustomerID=TableB.CustomerID

这个问题对我来说并不完全清楚,但有一种方法是将数据具体化到会话表中:

SessionId - UNIQUEIDENTIFIER is one option
Col1
Col2
...
Coln
UNIQUEIDENTITIER是最简单的选项,但不是最快的大键。否则,可以使用序列SQL2012+

生成会话标识符 需要处理数据的查询将接收此标识符并使用它筛选数据。 该解决方案允许同时使用多个编写器和读取器 如果可能,可以在系统停机期间执行表删除截断,以最大限度地减少删除影响删除是一项繁重的操作,而且 使用INSERT.生成数据。。选择:

缺点:

表是物化的,每个人都可以通过选择权限访问它。如果处理敏感数据,则必须处理安全拒绝

必须显式截断/删除表临时表,并自动删除表变量


临时表、表变量、永久表或XML字符串。Michael、Chris、Gordon谢谢大家。我刚刚读到了tsql中的变量。特别是临时表、表变量、表值函数、派生表和公共表表达式。以下哪一项可用于引用同一批中的行集。ThanksA CTE在同一批产品中并不好——你只能在之后立即使用它一次。这只是一次理论对话,还是你真的在尝试这些想法?如果你试过,哪些是,为什么不起作用?你能澄清你所说的“多个查询”是什么意思,或者给出一些你正在尝试做的事情的示例代码吗?谢谢比尔。我听说临时表的作用域在一个会话中。看看这个:@amad-你是说这个答案不适合你吗?
INSERT INTO SessionTable
(SessionId, Col1, Col2, ... , Coln)
SELECT @SessionId, ....
FROM <various sources>