【问题标题】:SQL Server : using unique identifier in Where clause [closed]SQL Server:在Where子句中使用唯一标识符[关闭]
【发布时间】:2019-05-02 20:20:20
【问题描述】:

我运行了这个查询:

select
    *
from
    [dbo].[planservice]
where
    cast([serviceid] as varchar(255)) = cast('49D9161A-B92B-E911-8101-001056B242CB' as varchar(255))

我不确定为什么会收到此错误消息:

从字符串转换为唯一标识符时转换失败

难道它们都不会被视为字符串吗?

编辑:这在没有强制转换的情况下确实有效,我的查询不起作用的原因是因为我在 where 子句中包含了这部分:

a.[planid] = ''

删除它后,一切正常。问题是,为什么会有这样的问题?

编辑:我不确定为什么人们将其标记为关闭。它有效,但我不知道它为什么有效。

【问题讨论】:

  • 请发布您的表格定义。
  • 我为什么要删除我的问题?它有效,但我不明白为什么当我删除 where 子句中的特定部分时它有效?
  • 因为空字符串不是有效的唯一标识符。你可能想要a.[planid] is null
  • 要给出错误planid 必须是表定义中的唯一标识符,在这种情况下它不能是空字符串。
  • 问题的问题是不清楚,没有提供足够的信息并且有矛盾。所以你有一大群沮丧的人,你没有得到你想要的答案,想要帮助的人没有得到他们想要的信息。您需要发布足够的代码让我们能够重现该问题。

标签: sql-server tsql uniqueidentifier


【解决方案1】:

如果您的serviceiduniqueidentifier,那么您为什么要将它转换为varchar(255)?你可以简单地运行

select
*
from
[dbo].[planservice]
where [serviceid] = '49D9161A-B92B-E911-8101-001056B242CB' 

这适用于uniqueidentifier

【讨论】:

  • 这对我不起作用,我最初尝试过。啊等等,我想通了为什么它不起作用。很有趣。
  • @LunchBox 如果这不起作用,那么你在某个地方还有另一个问题。
  • 我编辑了我的原始查询以显示我最初在做什么。
  • 我将此标记为答案。我不明白反对票;但是,我已经失去了兴趣,宁愿现在就结束这个问题。我会玩一下,看看我以后能不能弄明白。
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 2015-11-23
  • 2011-03-26
  • 2014-07-27
  • 1970-01-01
相关资源
最近更新 更多