簡體   English   中英

如何在SQL 2005中將變量設置為表名稱的SQL查詢結果的變量

[英]How to set a variable to the result of a sql query with a variable as a table name in SQL 2005

我目前在編寫存儲過程以及將int類型的變量的值設置為帶有變量作為表名的select語句的結果時遇到麻煩。 我查看了舊線程並嘗試了多種方法,但是沒有運氣。 如果沒有關於表名的錯誤,我最終會因為變量轉換問題而出錯。 我已經為此工作了很長時間,我們將不勝感激。 以下是我的代碼的一部分。 謝謝

DECLARE @BATCHNUMBER VARCHAR  --value set in earlier code
DECLARE @ETABLE VARCHAR(50); --the table name
DECLARE @FIRSTDOCID INT;      
SET @ETABLE = 'tablename_' + @BATCHNUMBER; --CREATE FIRST TABLE NAME

SELECT @FIRSTDOCID = MIN(D0CID) FROM @ETABLE

我得到的錯誤是:必須聲明表變量“ @ETABLE”

您正在嘗試從VARCHAR而不是表中進行選擇。 進行此工作的唯一方法是使用動態SQL。

DECLARE @SQL NVARCHAR(250);
SET @SQL = 'SELECT @OUTPUT = MIN(D0CID) FROM ' + QuoteName(@ETABLE);
EXEC sp_executeSql @SQL, N'@output INT OUTPUT', @FIRSTDOCID OUTPUT;

SELECT @FIRSTDOCID;

但是,我不建議使用動態SQL,因為這通常會導致SQL注入。

如果要動態構建查詢,則可能必須執行use exec之類的操作:

SET @QUERY = "SELECT" + ...etc.
exec(@QUERY)

由於ETABLE是varchar,而不是預期的“表變量”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM