微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决创建一个执行带有参数的存储过程的 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 举报,一经查实,本站将立刻删除。