LINQ to SQL 调用使用动态 SQL 的存储过程

发布于 2024-12-02 10:58:11 字数 258 浏览 0 评论 0原文

我正在尝试使用 LINQ 连接到 SQL 存储过程。它对于具有静态 SQL 查询的存储过程非常有效。

我想连接到具有动态 SQL 的存储过程。

在存储过程的末尾有一个 exec 语句。

exec(@srchQuery) 

当我这样做时,它不起作用,因为它是动态 SQL。

如果我使用 print @srchQuery 并复制该存储过程并在存储过程中使用该静态 SQL,则它可以正常工作。

I am trying to connect to SQL stored procedure using LINQ. It works pretty good for stored procedures that have static SQL query.

I want to connect to a stored procedure that has dynamic SQL.

At the end of stored procedure it has an exec statement.

exec(@srchQuery) 

When I do that it doesn't work because it is dynamic SQL.

If I use print @srchQuery and copy that stored procedure and use that static SQL in stored procedure, it works with no problem.

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空心↖ 2024-12-09 10:58:11

LINQ to SQL 分析直接的 SELECT 语句,以了解它作为执行所述 SQL 存储过程的结果所投影的模型类型。由于您使用的是 EXEC 动态语句,因此它无法确定要生成的模型类型。

简单的答案是要么不使用存储过程,而是使用 LINQ to SQL 来生成 SQL,或者不在存储过程中使用动态构建的语句。

您生成 SQL 语句的事实一定意味着您有一个强大的用例,因为它可以在没有存储过程的情况下实现您想要的效果。总是喜欢简单性...问问自己,您需要在存储过程中使用动态构建的语句吗?

LINQ to SQL analyses the direct SELECT statements to see what model type it has to project as the result of executing said SQL stored procedure. Because you are using a dynamic statement using EXEC, it can't determine what model type to generate.

Simple answer would be to either not use a Stored Procedure, and instead use LINQ to SQL to generate the SQL, or don't use a dynamic built statement within your stored procedure.

The fact that you are generating a SQL statement must mean you have a strong use case for it, as it can achieve what you want without a stored procedure. Always favour simplicity... ask yourself, do you need to use a dynamically built statement within a stored procedure?

余生共白头 2024-12-09 10:58:11

只需直接在 DataContext 中调用存储过程即可:

using (YourDataContext dc = new YourDataContext())
{
    ...
    dc.ExecuteCommand("EXEC MyStoredProcedure");
    ...
}

Just call the stored procedure directly within the DataContext:

using (YourDataContext dc = new YourDataContext())
{
    ...
    dc.ExecuteCommand("EXEC MyStoredProcedure");
    ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文