我正在创建一些 View ,其中包含对另一个数据库中的表的大量引用。
在某些时候,另一个数据库需要更改。
我想让下一个开发人员可以轻松更改脚本以使用另一个数据库。
这显然可以正常工作:
CREATE VIEW ViewName
AS
SELECT *
FROM AnotherDatabase.SchemaName.TableName;
但是当我这样做时:
DECLARE @DB CHAR(100)
SET @DB = 'AnotherDatabase'
GO
CREATE VIEW ViewName
AS
SELECT *
FROM @DB.SchemaName.TableName;
我收到错误:
Msg 137, Level 15, State 2, Procedure ViewName, Line 3
Must declare the scalar variable "@DB".
我可以做这样的事情:
DECLARE @SQL ...
SET @SQL = ' ... FROM ' + @DB + ' ... '
EXEC (@SQL)
但这违背了让下一个开发人员更轻松的目的 - 因为这种动态 SQL 方法删除了 SSMS 中的格式。
所以我的问题是:如何让下一个开发人员在需要交换数据库引用的地方轻松维护 T-SQL 代码?
注释:
- 我使用的是 SQL Server 2008 R2
- 另一个数据库位于同一服务器上。
最佳答案
考虑使用 SQLCMD 变量。这将允许您在部署时指定实际的数据库名称。运行脚本时,SQL Server 工具(SSMS、SQLCMD、SSDT)将用分配的字符串值替换 SQLCMD 变量名称。可以通过菜单选项 Query-->SQLCMD 模式选项为当前查询窗口打开 SQLCMD 模式。
:SETVAR OtherDatabaseName "AnotherDatabaseName"
CREATE VIEW ViewName AS
SELECT *
FROM $(OtherDatabaseName).SchemaName.TableName;
GO
当 SQL 对象受源代码控制时,此方法效果最佳。
关于sql-server - 在 SQL 中使用变量并在 SQL Server Management Studio 中保持格式设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032159/