Sql 如何为硬编码数据库声明变量?

Sql 如何为硬编码数据库声明变量?,sql,sql-server,database,tsql,if-statement,Sql,Sql Server,Database,Tsql,If Statement,我的SQL中有一些硬编码的数据库值,我需要转换为变量,我已经在位置中声明了它们,但我需要将Production2更改为下面的@Source\u database\u Name变量,但我不知道如何将其与信息模式一起放在后面,而不会出现语法错误 IF EXISTS(SELECT * FROM Production2.INFORMATION_SCHEMA.COLUMNS 我想唯一可以做到这一点的方法是动态sql生成(不幸的是)。实际上,不允许用户以您想要的方式参数化查询有很多原因(从数据库引擎的角

我的SQL中有一些硬编码的数据库值,我需要转换为变量,我已经在位置中声明了它们,但我需要将Production2更改为下面的@Source\u database\u Name变量,但我不知道如何将其与信息模式一起放在后面,而不会出现语法错误

IF EXISTS(SELECT *  FROM Production2.INFORMATION_SCHEMA.COLUMNS

我想唯一可以做到这一点的方法是动态sql生成(不幸的是)。实际上,不允许用户以您想要的方式参数化查询有很多原因(从数据库引擎的角度来看)。最让我头疼的是,这将使验证查询语法变得不可能(无法知道您所指的是实际存在的内容)


如果您谈论的是“能够对不同的数据库执行相同的SQL集”,而实际上是从代码(.NET/anywhere)执行此SQL,那么您可以通过在连接字符串中指定目标数据库(即更改设置数据库的级别,而不是在[SQL]中)来实现相同的结果脚本,而是在某个外部点)。

这只是存储在.SQL文件中的Transact-SQL吗?因为SSMS中的
sqlcmd
sqlcmd模式
允许您使用变量。否则,您将使用动态SQL/同义词/链接服务器。如果这些是存储过程并部署到不同的环境中,您还可以使用类似SQL Server的数据工具来管理它们。SQL Server数据工具具有可在T-SQL中使用的变量。