问题描述
在我看来,创建一个视图来显示在带参数的存储过程中计算的值是不可能的。
尝试这个而不是函数的原因是可以访问存储过程中的 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 (将#修改为@)