我有一个存储过程,它从同一服务器上的另一个数据库获取数据。
我不会硬编码使用哪个数据库,而是可以配置。如果没有动态sql,这可能吗?
到目前为止,我能想出的最佳解决方案是首先运行一个使用动态sql生成一堆视图的存储过程。然后,我可以从这些视图中选择数据,以避免为所有内容使用动态SQL。
示例:
DECLARE
@databaseName nvarchar(max),
@sql nvarchar(max)
-- Get this value from a configuration table
SET @databaseName = 'TestDatabase'
IF EXISTS(SELECT NULL FROM dbo.SysObjects WHERE [Name] = 'TestView')
DROP VIEW dbo.TestView
SET @sql = 'CREATE VIEW dbo.TestView AS SELECT * FROM ' + @databaseName +'.dbo.TestTable'
EXEC (@sql)
--I can now select from TestView using regular query.
我猜这是错误的做法。有更好的方法吗?