创建一个执行带有参数的存储过程的 VIEW

问题描述

我认为(错误地)这应该很简单,但找不到解决它的好方法

在我看来,创建一个视图来显示在带参数的存储过程中计算的值是不可能的。

尝试这个而不是函数的原因是可以访问存储过程中的 DML 语句。我的目标不是性能,而是使其对视图用户完全透明。我期待使用 OPENROWSET 摆脱它。以下示例:

这有效,但当然不使用参数:

ALTER PROC DoubleMe
@var1 INT
AS
BEGIN
SELECT @var1*2 AS Col1
END
GO

ALTER FUNCTION Wraper
(@var1 INT)
RETURNS INT
BEGIN 
RETURN (SELECT Col1 FROM 
OPENROWSET('sqlNCLI','Server=localhost;Trusted_Connection=yes;','exec db.dbo.DoubleMe 2'))
END 
GO

ALTER VIEW ViewExample
AS
SELECT dbo.Wraper(666) AS Col1
GO

SELECT * FROM ViewExample

CONCAT 不能用于包含参数。使用以下内容会给出消息“在函数内无效使用副作用运算符‘INSERT EXEC’。”

ALTER FUNCTION Wraper
(@var1 INT)
RETURNS INT
BEGIN
DECLARE @sql Nvarchar(max)
SET @sql = 'SELECT Col1 FROM 
OPENROWSET(''sqlNCLI'',''Server=localhost;Trusted_Connection=yes;'',''exec db.dbo.DoubleMe 2'')'

DECLARE @tmp TABLE (Col1 INT)
INSERT INTO @tmp EXEC(@sql)
RETURN (SELECT * FROM @tmp)

END  
GO

所以这意味着无法从视图中运行带有参数的存储过程。有什么解决办法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)