7

这是不正确的,我们不能动态地将表名传递给选择查询吗?

这给了我一个错误“必须声明表变量@TblName”

DECLARE @TblName VARCHAR(30)
SET @TblName = 'User'
SELECT * 
FROM @TblName
4

3 回答 3

14

您需要创建动态 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

演示:

单击此处查看 SQL Fiddle 中的演示。

建议阅读:

动态 SQL 的祸与福

于 2012-05-09T17:58:10.083 回答
1

你必须使用dynamicsql执行

把你的陈述包起来@selectstr

采用exec sp_executesql @selectstr

于 2012-05-09T17:33:29.253 回答
0

你可以通过使用动态查询来做这件事,检查下面

DECLARE @TblName VARCHAR(30)

DECLARE @vQuery NVARCHAR(100)

SET @TblName = 'User'

SET @vQuery = 'SELECT * FROM ' + @TblName

EXECUTE sp_executesql @vQuery
于 2012-05-10T05:12:11.287 回答