这是不正确的吗?我们不能动态地将表名传递给选择查询吗?
这给了我一个错误“必须声明表变量@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.
建议阅读:
关于sql-server - 如何在带有变量的选择查询中使用 SQL Server 表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10521144/