链接服务器在维护构建脚本方面遇到麻烦

时间:2015-11-12 18:12:45

标签: sql-server linked-server

我有一个测试数据库和一个开发数据库。现在我需要我们所有脚本的两个版本,因为我有一个链接服务器,并且由于数据库具有不同的名称,每个脚本之间的名称会发生​​变化。

人们如何解决这个问题?我们谈到了做替换的构建任务,但我希望有一种更优雅的方式。

1 个答案:

答案 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'