这是不正确的,我们不能动态地将表名传递给选择查询吗?
这给了我一个错误’必须声明表变量@TblName’
DECLARE @TblName VARCHAR(30) SET @TblName = 'User' SELECT * FROM @TblName
解决方法
您需要创建动态SQL查询,最好使用
QUOTENAME函数.使用QUOTENAME函数可以避免任何恶意输入问题.
下面是一个示例脚本,演示了如何通过传入表名来创建动态SQL查询来查询表.您可以按值将表名更改为变量@tablename.
为示例创建和插入脚本:
CREATE TABLE sample ( id INT NOT NULL ); INSERT INTO sample (id) VALUES (1),(2),(3),(4),(5),(6);
动态sql脚本:
DECLARE @execquery AS NVARCHAR(MAX) DECLARE @tablename AS NVARCHAR(128) SET @tablename = 'sample' SET @execquery = N'SELECT * FROM ' + QUOTENAME(@tablename) EXECUTE sp_executesql @execquery
演示:
Click here to view the demo in SQL Fiddle.
建议阅读: