2010-12-04 59 views
2

我正在創建一個存儲過程,該存儲過程必須創建一個表,該表的名稱取決於輸入變量。對於臨時結果我已經聲明瞭一個表變量:如何在tableB中選擇哪個名字是@tableB * FROM @tableA?

declare @tableA TABLE(
column1, 
column2, 
.. 
) 

輸出表名稱取決於用戶的輸入,所以我已經宣佈另一個變量

declare @tableB varchar = ... 

到底臨時結果必須被存儲到表名稱是@tableB,所以在存儲過程中我試圖寫下面的語句:

declare @sql varchar(max) 
set @sql = 'SELECT * INTO ' + @tableB + ' FROM @tableA' 
exec(@sql) 

這是不正確的。有誰知道如何從表變量插入值到表中哪個名稱是可變的?

+0

我在這裏錯過了什麼? @tableB是一個正常的表嗎?那麼爲什麼你不能使用簡單的動態插入查詢? – 2010-12-04 19:27:14

回答

1

你不能在這裏使用表變量,嘗試使用臨時表。 創建表#tableA(...

更多信息:link text

創建表#A( C1 INT, C2 INT );

插入到#A值(1 ,2);

插入到#A值(3,4);

申報@sql VARCHAR(最大);

declare @tableB sysname ='## tableB';

set @sql ='SELECT * INTO'+ @tableB +'FROM #A';

打印@sql;

exec(@sql);

go

select * from ## tableB;

0

假設@tableB已經存在,第一個猜測是嘗試:

SET @sql = 
    'INSERT 
    (
     col1, 
     col2 
    ) 
    INTO ' + @tableB + ' 
    SELECT 
    (
     col1, 
     col2 
    ) 
    FROM 
     @tableA' 

這不是語法檢查,因此要當心!

如果@tableB不存在,爲什麼它的名字需要來自用戶?

相關問題