我有一个测试数据库和一个开发数据库。现在我需要我们所有脚本的两个版本,因为我有一个链接服务器,并且由于数据库具有不同的名称,每个脚本之间的名称会发生变化。
人们如何解决这个问题?我们谈到了做替换的构建任务,但我希望有一种更优雅的方式。
答案 0 :(得分:1)
您可以为所需的对象创建同义词来代替完全限定的语句。例如:
SELECT * FROM [linked_server_name].[test_database_name].[dbo].[table_1]
...由以下部分组成......
[linked server].[database].[schema].[object]
由于这非常详细,您可以通过发出以下内容从上面的示例创建对象的同义词:
CREATE SYNONYM [dbo].[table_1] FOR [linked_server_name].[test_database_name].[dbo].[table_1]
...并且您的查询变为:
SELECT * FROM [dbo].[table_1]
您可以使用以下脚本为数据库中的所有表生成同义词,并将其替换为您的对象名称:
SELECT 'CREATE SYNONYM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ' FOR [SQL-SOURCE1].' + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
FROM [linked_server_name].[test_database_name].[INFORMATION_SCHEMA].Tables
WHERE TABLE_TYPE = 'BASE TABLE'