【发布时间】:2014-04-16 05:41:11
【问题描述】:
我有一个存储过程,它将一串 GUID 作为输入,并从表 GUID IN (@Param) 的表中进行选择。
@Param = 'b2e16cdc-1f1b-40e2-a979-f87a6a2457af,
c275dd13-bb54-4b8c-aa12-220b5980cabd,
af3552ec-37b1-4a76-81ad-1bd6b8c4cd6c,
3a7fda02-558b-49a9-a870-30350254d8c0,'
SELECT * FROM dbo.Table1 WHERE
TableGUID IN (@Param)
但是,我注意到查询返回值,只有当第一个 GUID 匹配时,否则它不会返回任何内容。这意味着它只与字符串中的第一个 GUID 进行比较。 谁知道怎么解决这个问题?
【问题讨论】:
-
为什么不对所有值使用单独的变量并给出 IN (@Param1, @Param2, @Param3...) 之类的范围?
-
SQL,与大多数语言一样,当传递 single 参数是一个字符串时,不会检查字符串的内容,查找逗号,并决定改为处理single 参数作为 multiple 参数,甚至可能是不同的数据类型。为什么会这样?
-
最好将存储过程定义为接受适当数据类型的参数,该数据类型设计用于保存多个单独的值。 SQL Server 中有两种这样的类型 - 表值参数或 xml。
标签: sql sql-server stored-procedures uniqueidentifier in-clause