2012-08-16 32 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