2013-03-06 147 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

相關問題