具体来说,我能否从当前数据库中的视图中调用存储过程。我已经知道关于“openrowset hack”的信息,因此这个例子可以工作: openrowset hack。
create view MyView as
select *
from openrowset (
'sqloledb',
'server=(local);trusted_connection=yes;',
'exec MyDatabase.dbo.MyStoredProcedure' -- Works fine
)
但是我希望能够在当前数据库中调用该存储过程,而不是像这样硬编码名称:
create view MyView as
select *
from openrowset (
'sqloledb',
'server=(local);trusted_connection=yes;',
'exec ' + db_name() + '.dbo.MyStoredProcedure' -- Don't want to hard-code DB name
)
很不幸,这不起作用,因为openrowset需要字面字符串,而不是任何类型的变量。
无论安全性和性能考虑如何,是否有解决方法? 这将使遗留系统的维护更加容易,因为此视图调用的存储过程会根据环境(开发,测试,生产)连接到不同的数据库。