如何在带有变量的select查询中使用SQL Server表名?

时间:2012-05-09 17:31:28

标签: sql-server sql-server-2008 tsql sql-server-2005

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

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

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

3 个答案:

答案 0 :(得分: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

演示:

Click here to view the demo in SQL Fiddle.

建议阅读:

The Curse and Blessings of Dynamic SQL

答案 1 :(得分:1)

你必须使用dynamic sql execution

将您的陈述包装在@selectstr

使用exec sp_executesql @selectstr

答案 2 :(得分:0)

您可以使用动态查询来执行此操作,请参阅下面的

DECLARE @TblName VARCHAR(30)

DECLARE @vQuery NVARCHAR(100)

SET @TblName = 'User'

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

EXECUTE sp_executesql @vQuery