如何避免在 SQL 同义词创建中硬编码数据库名称
How to avoid hard coding DB name in SQL synonym creation
使用 SQL Server 2008 R2。我有一个包含以下语句的脚本:
create synonym [synonym_name] for [linkedServerName].[databaseName].[ext].[tableName1]
create synonym [synonym_name] for [linkedServerName].[databaseName].[ext].[tableName2]
问题:
1.有什么办法可以避免4部分命名。特别是硬编码的数据库名称
已有一个用于创建 LinkedServer 的脚本。可以在创建同义词时使用吗?
为多个 Table/Views 创建同义词的最佳方法是什么?
declare @Server sysname,
@db sysname,
@Schema sysname,
@Table sysname,
@statement varchar(max)
SELECT @Server = 'Venice',
@db = 'venice1',
@Schema = 'ext'
EXEC('CREATE SYNONYM synonym_name1 FOR '+ @Server +'.'+ @db +'.' + @Schema + '.Table1')
EXEC('CREATE SYNONYM synonym_name2 FOR '+ @Server +'.'+ @db +'.' + @Schema + '.Table2')
思考:只有这样吗?
试试这个:
declare @Server sysname,
@db sysname,
@Schema sysname,
@Table sysname,
@statement varchar(max)
SELECT @Server = 'ServerName',
@db = 'DatabaseName',
@Schema = 'SchemaName',
@Table = 'TableName'
set @statement = 'CREATE SYNONYM synonym_Name FOR '+
@Server +'.'+
@db +'.' +
@Schema + '.' +
@Table
EXEC (@statement)
是的,这是唯一的方法。根据 MSDN documentation,Synonym
创建语法需要数据库名称,如下所示,除非您正在寻求动态 SQL.
的帮助
-- SQL Server Syntax
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>
<object> :: =
{
[ server_name.[ database_name ] . [ schema_name_2 ]. object_name
}
使用 SQL Server 2008 R2。我有一个包含以下语句的脚本:
create synonym [synonym_name] for [linkedServerName].[databaseName].[ext].[tableName1]
create synonym [synonym_name] for [linkedServerName].[databaseName].[ext].[tableName2]
问题: 1.有什么办法可以避免4部分命名。特别是硬编码的数据库名称
已有一个用于创建 LinkedServer 的脚本。可以在创建同义词时使用吗?
为多个 Table/Views 创建同义词的最佳方法是什么?
declare @Server sysname, @db sysname, @Schema sysname, @Table sysname, @statement varchar(max) SELECT @Server = 'Venice', @db = 'venice1', @Schema = 'ext' EXEC('CREATE SYNONYM synonym_name1 FOR '+ @Server +'.'+ @db +'.' + @Schema + '.Table1') EXEC('CREATE SYNONYM synonym_name2 FOR '+ @Server +'.'+ @db +'.' + @Schema + '.Table2')
思考:只有这样吗?
试试这个:
declare @Server sysname,
@db sysname,
@Schema sysname,
@Table sysname,
@statement varchar(max)
SELECT @Server = 'ServerName',
@db = 'DatabaseName',
@Schema = 'SchemaName',
@Table = 'TableName'
set @statement = 'CREATE SYNONYM synonym_Name FOR '+
@Server +'.'+
@db +'.' +
@Schema + '.' +
@Table
EXEC (@statement)
是的,这是唯一的方法。根据 MSDN documentation,Synonym
创建语法需要数据库名称,如下所示,除非您正在寻求动态 SQL.
-- SQL Server Syntax
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>
<object> :: =
{
[ server_name.[ database_name ] . [ schema_name_2 ]. object_name
}