【问题标题】:SQL For xml path on int columns?SQL对于int列上的xml路径?
【发布时间】:2014-03-03 12:47:50
【问题描述】:

我可以在 sql 中为 int 列使用 FOR XML PATH 吗? 这样我就可以将其用于以下用途:

declare @contactIds = (select id from contacts)

然后像这样使用它:

select * from calls where contactId in (@contactIds)

有可能吗?

【问题讨论】:

  • 您的意思是您希望将一组 ID 存储在一个变量中,以便稍后在查询的 WHERE 子句中使用它?您可以使用临时表来做到这一点。
  • 如果@contactIds 是一个字符串(如果你使用FOR XML PATH,那么SQL 将不会检查该字符串的内容,查找逗号,然后决定处理那个单个 字符串,就好像它实际上是IN() 的几个单独 参数。我不知道有什么语言可以做到这一点,所以当人们尝试这样做时,我总是感到惊讶用 SQL 来做。

标签: sql sql-server for-xml-path


【解决方案1】:

这是你想要的吗?

select @contactIds = stuff((select ','+cast(id as varchar(8000))
                            from contacts
                            for xml path('')
                           ), 1, 1, '');

您也可以直接使用子查询或表变量:

select *
from calls
where contactId in (select id from contacts);

我的猜测是你的问题比问题更复杂,所以这并不能真正解决问题。

【讨论】:

  • 我有一个查询要带上联系人姓名和他的拨出电话号码和来电号码。所以我使用子查询但运行需要 12 秒,所以我正在寻找如何改进它...
  • 可能有一些方法可以实际改进查询。我建议您问另一个 问题,并提供有关您实际在做什么的信息。你不能在in 语句中使用@ContactIds(好吧,你可以,它只是没有做你想做的事)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 2018-11-15
  • 1970-01-01
相关资源
最近更新 更多