繁体   English   中英

如何将 guid 列表作为参数传递给 sql 命令

[英]How to pass list of guid as a parameter to a sql command

我需要通过将 id 列表传递给来过滤 sql 请求,这是命令:

var command = "select Software.Name as SoftwareName,SoftwareType.Name as SoftwareType from AssetManagement.Asset as Software inner join AssetManagement.AssetType as SoftwareType on (SoftwareType.Id = Software.TypeId) where Software.Id  in (@P)";


 cmd.Parameters.AddWithValue("@P", authorizedSoftwaresId);

authorizedSoftwaresId 是一个字符串列表,包含如下数据:

“7D23968B-9005-47A9-9C37-0573629EECF9,F1982165-3F6D-4F35-A6AB-05FA116BA279”它只返回一行,我尝试为每个值添加引号但我得到“从字符串字符到唯一标识符的转换失败”异常

这是一个很常见的问题,答案可能取决于您的数据库引擎以及您是否使用 ADO.Net、Dapper 等。

我会根据我自己在 MS Sql 服务器和 PostgreSQL 上遇到此问题的经验为您提供一些提示。

  1. 很多人认为AddWithValue是个魔鬼。 您可能会考虑Add
  2. SQL 语句中的IN (@P)可能是问题的根源。 请改用Any选项。 请参见SQL 中 IN 和 ANY 运算符的区别 在类似的情况下,我已经成功地进行了这种改变。
  3. 如果您的所有输入都是 GUID,您可能会考虑将类型更改为 GUID 的集合,尽管我不认为这是解决方法,当您遇到困难时,您必须尝试一切。
  4. 如果必须,您可以解析集合的字符串版本并在每个值周围添加刻度 ( ' )。 这种选择会产生后果,比如它可能会阻止您使用参数 (@P),而是构造您想要的最终 SQL 语句(即,通过字符串操作手动构造整个 WHERE 子句并丢失参数。)

祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM