Sql server 在SQL Server存储过程中动态设置数据库名称?
如何在SQL Server存储过程中动态设置数据库名称?存储过程是特定于数据库的。如果您想动态地访问另一个数据库中的数据,那么必须创建动态SQL并执行它Sql server 在SQL Server存储过程中动态设置数据库名称?,sql-server,Sql Server,如何在SQL Server存储过程中动态设置数据库名称?存储过程是特定于数据库的。如果您想动态地访问另一个数据库中的数据,那么必须创建动态SQL并执行它 Declare @strSQL VarChar (MAX) Declare @DatabaseNameParameter VarChar (100) = 'MyOtherDB' SET @strSQL = 'SELECT * FROM ' + @DatabaseNameParameter + '.Schema.TableName' 您可以使
Declare @strSQL VarChar (MAX)
Declare @DatabaseNameParameter VarChar (100) = 'MyOtherDB'
SET @strSQL = 'SELECT * FROM ' + @DatabaseNameParameter + '.Schema.TableName'
您可以使用if子句将@databasename参数设置为您喜欢的DB
执行语句以获得结果。这不是动态SQL,适用于存储过程
Declare @ThreePartName varchar (1000)
Declare @DatabaseNameParameter varchar (100)
SET @DatabaseNameParameter = 'MyOtherDB'
SET @ThreePartName = @DatabaseNameParameter + '.Schema.MyOtherSP'
EXEC @ThreePartName @p1, @p2... --Look! No brackets
有时,使用同义词是一种很好的策略:
CREATE SYNONYM [schema.]name FOR [[[linkedserver.]database.]schema.]name
然后,在存储过程中通过同义词引用对象
更改同义词点的位置是动态SQL的问题,但是您的主存储过程可以完全不使用动态SQL。创建一个表来管理所有需要引用的对象,并创建一个存储过程来将所有所需的同义词切换到正确的上下文
此功能仅在SQL Server 2005及更高版本中可用
此方法不适用于频繁切换或不同连接需要使用不同数据库的情况。我将它用于偶尔在服务器之间移动的数据库(它可以在prod数据库或复制数据库中运行,并且它们具有不同的名称)。将数据库恢复到其新主页后,我在其上运行了switcheroo SP,一切都在8秒钟内工作。您的问题并不完全清楚。也许你应该在这个问题上多加一些细节。不过要注意,这种方法有很多局限性。例如,动态SQL位于完全不同的范围内,因此它无法访问存储过程中的表变量、临时表等。此外,它还有很大的潜在安全问题。您应该在使用此方法之前签出。是否可以仅为数据库名创建同义词?示例:我的数据库的名称是:MYDB_01。我可以为它创建同义词吗?不,这是不可能的。太糟糕了,嗯?嗯。总比没有好。至少不需要动态SQL。但是,每个对象(表、视图)必须单独定义。正确!因此,创建和更新同义词需要动态SQL,而不是引用或使用它们。