sql-server - 如何在带有变量的选择查询中使用 SQL Server 表名?

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

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

这给了我一个错误“必须声明表变量@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.

建议阅读:

The Curse and Blessings of Dynamic SQL

关于sql-server - 如何在带有变量的选择查询中使用 SQL Server 表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10521144/

相关文章:

java - JPA 复合主键

sql-server - 获取年份中的季度开始日期和结束日期

asp.net-mvc - IIS7,SQL 2008和ASP.NET MVC安全性

tsql - t-sql 替换双引号

sql - SSRS基于相同数据类型的多条线 - 折线图

java - 更新 sql server 表给出错误 java.lang.NoClassDefFoundError : com/microsoft/sqlserver/jdbc/TDSWriter$1

python - 在 'Windows Credentials' 的 Linux 上使用 python 连接到 MS SQL Server

sql - 将文本转换为 xml 错误非法限定名称字符

sql - 仅当所有条件都为 true 时才返回行

sql - 如何从 T-SQL 获取当前实例名称