这个是否不正确,我们不能将表名动态地传递给选择查询吗?
这会给我一个错误'Must declare the table variable @TblName'
DECLARE @TblName VARCHAR(30)
SET @TblName = 'User'
SELECT *
FROM @TblName
这个是否不正确,我们不能将表名动态地传递给选择查询吗?
这会给我一个错误'Must declare the table variable @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);
DECLARE @execquery AS NVARCHAR(MAX)
DECLARE @tablename AS NVARCHAR(128)
SET @tablename = 'sample'
SET @execquery = N'SELECT * FROM ' + QUOTENAME(@tablename)
EXECUTE sp_executesql @execquery
你需要使用 dynamic
SQL 执行
将你的语句包装在 @selectstr
中
使用 exec sp_executesql @selectstr
您可以使用动态查询来完成此操作,请参见以下内容
DECLARE @TblName VARCHAR(30)
DECLARE @vQuery NVARCHAR(100)
SET @TblName = 'User'
SET @vQuery = 'SELECT * FROM ' + @TblName
EXECUTE sp_executesql @vQuery