LINQ to SQL 调用使用动态 SQL 的存储过程
我正在尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
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 usingEXEC
, 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?
只需直接在 DataContext 中调用存储过程即可:
Just call the stored procedure directly within the DataContext: