【发布时间】:2012-05-24 12:07:51
【问题描述】:
具体来说,我可以在视图中从 当前数据库 调用 proc。我已经知道openrowset hack,所以这是可行的,例如:
create view MyView as
select *
from openrowset (
'sqloledb',
'server=(local);trusted_connection=yes;',
'exec MyDatabase.dbo.MyStoredProcedure' -- Works fine
)
但我希望能够从当前数据库调用 proc,而无需像这样对名称进行硬编码:
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 需要文字字符串,而不是任何类型的变量。
不管安全性和性能方面的考虑,是否有解决方法?这将使遗留系统的维护更容易忍受,因为此视图将调用的 proc 根据环境(开发、测试、产品)连接到不同的数据库。
【问题讨论】:
-
不,你不能调用存储过程
-
嗯,你可以使用openrowset。这有点像 hack,诚然,我正在寻找更大的 hack。
标签: sql-server stored-procedures sql-server-2008-r2 dynamic-sql sql-view