2012-08-16 65 views
0

以下是我正在運行的情況SQL select語句 on local string。 如果我運行正常的選擇查詢我的表然後它的作品。SQL:爲本地字符串變量運行select語句

select * from tablesname 

但是,如果我有以下情況:

declare @string nvarchar(400) 

set @string = N'from tablesname' 

現在,如果我跑select * from @string,它並不如預期的工作。

請建議我解決此問題,因爲我只想以這種方式運行select語句。 如果我應該嘗試一些其他方式,然後建議我。

謝謝, Tausif。

+1

set @string = N'from tablesname'? – ssedano 2012-08-16 07:30:08

+0

最好從每個表中選擇一個存儲過程/ tvf/whatever,而不是從任何表中選擇(通過參數和動態sql)。我猜這就是你想要實現的目標...... – Bridge 2012-08-16 07:33:02

回答

1

假設你正在使用MySQL,因爲你的問題被加上它,雖然這set @string = N'from tablesname'建議,您使用的是MS SQL Server或東西:

SET @yourDynamicTablename = 'yourTable'; 
SET @sql = CONCAT('SELECT * FROM ', @yourDynamicTablename); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

你可能希望把他們在存儲過程。

您的嘗試沒有奏效,因爲您無法從字符串中進行選擇。要進一步閱讀有關準備好的語句,這些語句對避免SQL注入攻擊也很有用,請參閱manual