首页
学习
活动
专区
圈层
工具
发布

T-SQL变量
EN

Stack Overflow用户
提问于 2015-08-19 05:15:37
回答 4查看 349关注 0票数 2

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

我强调的是同一批。

非常感谢

EN

回答 4

Stack Overflow用户

发布于 2015-08-19 05:23:37

创建一个temp表变量并插入其中。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-02-23 04:47:28

这对我来说还不够清楚,但您可以使用bulk insert或bulk update来处理multiplus结果。

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

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

要更新,实现您有'customers‘的TableA要用TableB信息更新,然后您可以执行以下操作...

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

票数 0
EN

Stack Overflow用户

发布于 2016-02-23 05:07:18

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

代码语言:javascript
复制
SessionId - UNIQUEIDENTIFIER is one option
Col1
Col2
...
Coln

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

  1. 生成需要处理数据的会话identifier
  2. Queries接收此标识符并使用它过滤数据。
  3. 该解决方案允许多个写入器和读取器在系统停机期间(如果可能)执行
  4. 表删除(截断),以将删除影响降至最低(删除是一项繁重的操作和locks the entire table)

数据生成是使用INSERT .. SELECT:获得的

代码语言:javascript
复制
INSERT INTO SessionTable
(SessionId, Col1, Col2, ... , Coln)
SELECT @SessionId, ....
FROM <various sources>

Disadvantages:

  1. 表被实体化,每个拥有SELECT权限的人都可以访问。必须处理安全性(DENY),如果敏感数据为handled.
  2. table,则必须显式截断/删除(自动删除临时表和表变量)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32082673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档