exec sp_executesql 如何拼装语句

发布于 2022-09-07 20:16:27 字数 697 浏览 16 评论 0

我直接用 如下sql语句运行成功查到理想数据

exec sp_executesql N'Select * FROM FC_Repair WHERE  
        F_RepairDepartmentId in 
        (  
            ''ace7f0e7-f158-4587-920d-e76546885198'',''bf421a22-786b-40fd-8afc-c3e5e2364901'' 
        )  '

修改为参数式后,查不到数据,请问如果修改下面的sql语句。
这是用dapper DynamicParameters动态参数查询后生成的sql语句,所以在不动原有sql格式的前提下,找到一个更优解呢?

exec sp_executesql N'Select * FROM FC_Repair WHERE  
        F_RepairDepartmentId in 
        (  
            @F_RepairDepartmentId0 
        )  ', 
N'@F_RepairDepartmentId0 nvarchar(4000)',
@F_RepairDepartmentId0=
N'''ace7f0e7-f158-4587-920d-e76546885198'',''bf421a22-786b-40fd-8afc-c3e5e2364901'' '

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

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

发布评论

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

评论(1

那伤。 2022-09-14 20:16:27

这种 IN中的语句确实不能像你那样写,无论如何@F_RepairDepartmentId0都被解释为 单独一个 字符串。
对于IN, 需要改成字符串拼接sql的形式,如下面这样:

DECLARE @sql NVARCHAR(4000);
DECLARE @F_RepairDepartmentId0 NVARCHAR(3000);
SET @F_RepairDepartmentId0 = N'''ace7f0e7-f158-4587-920 D -e76546885198'', ''bf421a22-786b-40fd-8afc-c3e5e2364901''';
SET @sql = N'SELECT *
                       FROM FC_Repair
                       WHERE
                         F_RepairDepartmentId IN
                         (' + @F_RepairDepartmentId0 + ')';

EXEC sp_executesql @sql
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文