2013-03-06 150 views
1

我有一些存储过程使用临时表来读取要在其上执行更新的ID列表。我也有一个本地查询,其中包含我想要传递给其中一个存储过程的ID列表。有没有办法做这样的事情?将本地数据插入到SQL Server临时表中

INSERT INTO #MyBackendTempTable 
SELECT ID 
FROM MyLocalQuery 

我想我可以通过在VBA中的记录,而如果我有我会做循环做到这一点,但它会好得多有这样的一组明智的方式。我知道Access可以进行直通查询,但据我所知,他们只能对服务器上的对象起作用。有没有我不知道的一些简单的方法?

+0

在SQL Server 2008中,你可以使用TVP。你为什么还在使用2005? – 2013-03-06 21:24:40

+0

@Aaron:也许是因为许多大型军团移动了真正的懒散。去年为我工作的公司正处于2000年至2005年的过程中! – 2013-03-06 21:27:11

+0

@AaronBertrand我很乐意,而且我正在用它的力量来做它。但现在,我必须与我所拥有的一起工作。 – 2013-03-06 21:28:11

回答

2

那么如果查询真的很简单,并且你只有一组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; 
+0

不错。我很喜欢第二个选项。考虑到我已经在后端使用了几个临时表,我应该自己想一想。谢谢! – 2013-03-06 21:46:12

相关问题