sql-server - Query中使用可变表名

标签 sql-server

有时我需要运行相同的 SQL Server 脚本,每次将每个表名中的一两个字母更改为每次运行脚本时都不同的值。

如何在脚本的开头设置一次,这样我就不需要更改每个表名?

这是脚本的一个简化示例,实际上它包含更多的表:

SELECT * FROM T_Atable1 
    WHERE ref IN (SELECT ref FROM T_Atable2)
         AND customer IN (SELECT customer FROM T_Atable3)

表名的格式为 T_ 其中:

  • T_”已修复
  • <id>是表名的可变部分。在上面的例子中 = "A"
  • <table name>是表的固定名称。在上面的例子中,固定的部分是“table1”,“table2”,“table3”

我怀疑我需要使用动态 SQL,但不知道该怎么做。

SQL Server 可以是 2003+ 的任何版本,具体取决于包含数据的系统。

最佳答案

您需要使用动态 SQL。 动态 SQL 就是您在 SQL 过程或应用程序中的字符串中“动态”构建查询,然后执行该字符串。

例如;

DECLARE @tableVar1 VARCHAR(255) = 'T_Atable1'
DECLARE @tableVar2 VARCHAR(255) = 'T_Atable2'
DECLARE @tableVar3 VARCHAR(255) = 'T_Atable3'


EXEC('
    SELECT * FROM ' + @tableVar1 + '
    WHERE ref IN (SELECT ref FROM ' + @tableVar2 + ')
    AND customer IN (SELECT customer FROM ' + @tableVar3 + ')
')

关于sql-server - Query中使用可变表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24545766/

相关文章:

sql-server - 架构更改未在 SQL 2008 (SSMS) 的 Intellisense 中更新

mysql - 将新列添加到整个数据库表

php - 使用一个参数 pdo 查询两个表

c# - SqlDataAdapter.DeleteCommand() 适用于 AddWithValue() 但不适用于 Add() - 为什么?

sql - 在 where 子句中使用小数 - 将 nvarchar 转换为数字数据类型时出现算术溢出错误

asp.net - SQL部署后无法连接

sql - 修改SELECT语句的返回值(SQL)【优化查询】

php - 对所有用户使用相同的 MySQL 链接?

c# - 数据行 ID 字符串与对象 ID 字符串不匹配,即使在检查调试后它们是相同的字符串

sql-server - 如何识别所有 SSRS 报告