Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server IN运算符中的Sql Server替换函数_Sql Server - Fatal编程技术网

Sql server IN运算符中的Sql Server替换函数

Sql server IN运算符中的Sql Server替换函数,sql-server,Sql Server,我正在尝试构建一个动态sql查询 我有一个字段,它是由管道分隔的GUID组成的字符串 我想执行一个查询,在该字段中查找所有具有GUID的用户 在下面的示例中,我刚刚添加了两个虚拟guid作为示例。我的第二个查询按我所希望的方式工作。我的第一个带有REPLACE函数的查询不起作用。如果我只执行Replace-Select,它会返回第二个查询中的结果,因此我希望它返回相同的结果。有人能帮我解决我在这里缺少的东西吗?谢谢 select * from CMS_User WHERE Convert(va

我正在尝试构建一个动态sql查询

我有一个字段,它是由管道分隔的GUID组成的字符串

我想执行一个查询,在该字段中查找所有具有GUID的用户

在下面的示例中,我刚刚添加了两个虚拟guid作为示例。我的第二个查询按我所希望的方式工作。我的第一个带有REPLACE函数的查询不起作用。如果我只执行Replace-Select,它会返回第二个查询中的结果,因此我希望它返回相同的结果。有人能帮我解决我在这里缺少的东西吗?谢谢

select * from CMS_User 
WHERE Convert(varchar(36),UserGUID) IN(
    select '''' + REPLACE('6415B8CE-8072-4BCD-8E48-9D7178B826B7|AEDD6E3F-61C1-46CF-B2D4-750180036FFF','|',''',''') + ''''
    )


select * 
from CMS_User 
WHERE Convert(varchar(36),UserGUID) IN('6415B8CE-8072-4BCD-8E48-9D7178B826B7','AEDD6E3F-61C1-46CF-B2D4-750180036FFF')
更新: 下面是一些SQLFIDLE查询,以进一步说明我在做什么

选择所有显示2条记录

使用硬编码子查询选择

选择试图为IN子查询替换以管道分隔的GUID

子查询选择以显示我正在得到我想要的

我认为我们其他人仍然需要更多的信息来了解您试图让查询返回的内容。(为什么硬编码值不可接受)。 我的猜测是,您需要一个可以考虑多个用户的动态查询。 在下面的查询中,您应该能够用任意数量的GUID替换集合

我不喜欢使用exec命令,但似乎这就是这里的工作原理

declare @tempID varchar(max)
set @tempID = '6415B8CE-8072-4BCD-8E48-9D7178B826B7|AEDD6E3F-61C1-46CF-B2D4-750180036FFF'
set @tempID =  char(39) + replace (@tempID
                    ,'|', CHar(39) + char(44) + Char(39)) + char(39)

exec(' select * from CMS_User WHERE UserGUID IN(' + @tempID + ')  ')
编辑:您提到从另一个表获取guid。为什么不直接引用那个表呢

Select * from CMS_User 
WHERE UserGUID in(select UserGUID from othertable)

您如何“只能访问查询的位置”将此字符串粘贴到文本框中并运行它,还是使用其他语言编写脚本并传递到Sql Server(即:是否可以进行预处理?)?还要定义“我的第一个带有REPLACE函数的查询不起作用”。它是否抛出错误,是否没有得到结果,是否得到了结果但结果是错误的?除非你用示例数据为我们设置了类似的东西,否则我们看不到正在发生什么,你需要告诉我们。我应该删除对Where的唯一访问。这是我的最终案例,但这实际上是在管理工作室发生的。抱歉,“不工作”表示它不返回任何空数据集。其中,作为第二个查询,有一个包含两个结果的数据集。我将试用SQLFIDLE。您使用的是什么版本的SQL,有一些可能的解决方案(),但仅在sql2008或更高版本中提供。为了帮助您了解问题所在(如果您在任何人回答之前就找到了解决方法,您可以随意发布自己问题的答案),您在非工作版本中运行的查询您是对的,我需要一个动态查询。我从另一个表中的字段获取userguid。因此,每个记录都会发生明显的变化。你的例子可能有用,但我只能在WHERE子句(CMS限制)内工作,所以你没有的东西不会帮助我,但谢谢你。