将本地数据插入 SQL Server 临时表
Posted
技术标签:
【中文标题】将本地数据插入 SQL Server 临时表【英文标题】:Insert local data into SQL Server temp table 【发布时间】:2013-03-06 21:22:45 【问题描述】:我有一些存储过程使用临时表来读取 ID 列表以执行更新。我还有一个本地查询,其中包含我想传递给其中一个存储过程的 ID 列表。有没有办法做这样的事情?
INSERT INTO #MyBackendTempTable
SELECT ID
FROM MyLocalQuery
我想我可以通过循环遍历 VBA 中的记录集来做到这一点,如果我必须这样做的话,我会这样做,但如果有一个明智的方法来做到这一点会更好。我知道 Access 可以进行直通查询,但据我所知,它们只能作用于服务器上的对象。有一些我不知道的简单方法吗?
【问题讨论】:
在 SQL Server 2008 中,您可以使用 TVP。为什么还在用 2005? @Aaron:可能是因为许多大型军团行动缓慢。我去年工作的公司正处于从 2000 年到 2005 年的过程中! @AaronBertrand 我很乐意,而且我正在努力解决这个问题。但现在,我必须利用我所拥有的。 【参考方案1】:如果查询真的那么简单,并且您只有一组 ID(一列),您可以在前端构建一个逗号分隔的列表,然后将其传递给后端的存储过程,然后使用您最喜欢的拆分机制 (I have a favorite) 拆分它。您的存储过程将是(假设之前在同一范围内创建了 #temp 表):
CREATE PROCEDURE dbo.whatever
@IDList VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
INSERT #MyBackendTempTable(ID) SELECT Item FROM dbo.Split(@IDList);
END
GO
在前端,您将构建一个以逗号分隔的列表以传递给该参数。
或者您可以使用基于 spid、应用程序实例、您拥有的某些密钥的永久表 - 假设您可以唯一标识每个用户。然后你会这样做:
INSERT dbo.MyBackEndPermanentTable(Session, ID)
SELECT 'SessionSomething', ID
FROM MyLocalQuery;
【讨论】:
不错。我非常喜欢第二个选项。考虑到我已经在后端使用了几个临时表,我应该自己考虑一下。谢谢!以上是关于将本地数据插入 SQL Server 临时表的主要内容,如果未能解决你的问题,请参考以下文章