从触发器调用外部存储过程块

发布于 2025-02-12 11:46:26 字数 1174 浏览 1 评论 0原文

我有一个调用外部功能的存储过程:

ALTER PROCEDURE [dbo].[spFoo_CallApp]
    @Url [nvarchar](max),
    @Payload [int],
    @Type [nvarchar](max)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [Foo_HttpCaller].[StoredProcedures].[CallWebService]

直接从SSM呼叫完美工作。存储的过程几乎没有时间完成。

但是,从触发器调用它时,需要一些时间并传达错误消息。

DECLARE @Id int

SELECT @Id = Id 
FROM FooBelege AS T1
WHERE EXISTS (SELECT 1 FROM inserted AS T2 WHERE T1.Id = T2.Id)

DECLARE @return_value int

EXEC [dbo].[spFoo_CallApp]
        @Url = N'https://...../trigger/',
        @Payload = 219095,
        @Type = N'VK'

错误:

msg 6522,级别16,状态1,过程dbo.spfoo_callapp,第0行[批处理启动行0]
在执行用户定义的例程或汇总“ spfoo_callapp”期间,发生了.NET框架错误:
system.net.webexception:远程服务器返回错误:(500)内部服务器错误。
system.net.webexception:
在System.net.webclient.uploaddatainternal(URI地址,字符串方法,字节[]数据,WebRequest& request)
在System.net.webclient.uploadstring(URI地址,字符串方法,字符串数据)
在storedprocedures.callwebservice(SQLString URL,SQLINT32有效载荷,SQLSTRING TYPE)

,更有趣的是,这取决于有效载荷。使用219095 仅在直接调用存储过程而不是从触发器内部调用存储过程时起作用。使用另一个ID甚至从触发器上起作用。

任何帮助将不胜感激。

谢谢

I have a stored procedure calling an external function:

ALTER PROCEDURE [dbo].[spFoo_CallApp]
    @Url [nvarchar](max),
    @Payload [int],
    @Type [nvarchar](max)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [Foo_HttpCaller].[StoredProcedures].[CallWebService]

Calling directly from SSMS works perfectly. The stored procedure finishes in almost no time.

However, when calling it from a trigger, it takes some time and throws an error message.

DECLARE @Id int

SELECT @Id = Id 
FROM FooBelege AS T1
WHERE EXISTS (SELECT 1 FROM inserted AS T2 WHERE T1.Id = T2.Id)

DECLARE @return_value int

EXEC [dbo].[spFoo_CallApp]
        @Url = N'https://...../trigger/',
        @Payload = 219095,
        @Type = N'VK'

Error:

Msg 6522, Level 16, State 1, Procedure dbo.spFoo_CallApp, Line 0 [Batch Start Line 0]
A .NET Framework error occurred during execution of user-defined routine or aggregate "spFoo_CallApp":
System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
System.Net.WebException:
at System.Net.WebClient.UploadDataInternal(Uri address, String method, Byte[] data, WebRequest& request)
at System.Net.WebClient.UploadString(Uri address, String method, String data)
at StoredProcedures.CallWebService(SqlString url, SqlInt32 payload, SqlString Type)

What is even more funny, it depends on the payload. Using the 219095
works only when calling the stored procedure directly but not from inside of the trigger. Using another Id works even from the trigger.

Any help would be appreciated.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文