Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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查询中的运算符_Sql_Sql Server - Fatal编程技术网

SQL Server查询中的运算符

SQL Server查询中的运算符,sql,sql-server,Sql,Sql Server,我有这类记录: Rajkot,Gandhinagar 但是我想把上面的记录改成下面的记录 'Rajkot','Gandhinagar' 正如我想用IN运算符得到结果一样。注意,使用连接表通常会表现得更好,如注释中所述 尽管如此,假设您仍坚持设计: TableA ID ValueList 1 Uno,Dos,Tres 2 Foo,Bar,Baz,Quux 你想做与此等效的事情: Select * from TableA a where @Value in

我有这类记录:

Rajkot,Gandhinagar
但是我想把上面的记录改成下面的记录

'Rajkot','Gandhinagar'

正如我想用IN运算符得到结果一样。

注意,使用连接表通常会表现得更好,如注释中所述

尽管如此,假设您仍坚持设计:

TableA
ID      ValueList
1       Uno,Dos,Tres
2       Foo,Bar,Baz,Quux
你想做与此等效的事情:

Select * 
from TableA a
where @Value in ValueList -- ERROR
试试这个:

Select * 
from TableA a
where ','+ValueList+',' like '%,'+@Value+',%'
如果要执行此操作,请执行以下操作:

select * 
from TableA b
where b.Value in (select ValueList from TableA a where a.ID = b.ID)
尝试:

设计和性能说明:此设计防止在
值列表
列上使用任何索引。在以下情况下,这可能不是问题:

  • 表A非常小,只有很少的行(例如<10行)。这是因为,如果数据放在一个或两个页面中,那么查找索引所涉及的开销可能大于仅扫描页面和进行字符串比较所涉及的开销

  • 或者,实际上只搜索了一小部分行

  • 例如,如果您通过唯一键查找单个行,或通过有效索引查找几十行,并且只想根据字符串是否在
    值列表中进行筛选,这可能比连接表快,因为数据保存在同一页中

  • 它也可能比过滤客户端更快(因为测试失败的行不必返回给客户端)
换句话说,如果您不是按此列表中的值进行搜索,而只是按值进行筛选,则可能不值得将它们放入连接表中


像往常一样,一个人不应该对设计武断,而应该测试代码:

select ''''+substring('Rajkot,Gandhinagar',1,charindex(',','Rajkot,Gandhinagar',0)-1)+'''' + ',' +''''+
      substring('Rajkot,Gandhinagar',charindex(',','Rajkot,Gandhinagar',0)+1,len('Rajkot,Gandhinagar'))+''''

不应在一列中存储多个值。使用连接表。
SELECT''''+-REPLACE('Rajkot,Gandhinagar',',',''''','',''''''''''+'''''.
@gofr1我想他是指泛型的东西。@sagi我想他想把它放在一个变量中,并添加到一些动态查询中。在您的情况下,另一种方法是
类似于
操作符。我的意思是,多个
,比如
-s,每个记录对应一个。但这将是缓慢而混乱的。
select ''''+substring('Rajkot,Gandhinagar',1,charindex(',','Rajkot,Gandhinagar',0)-1)+'''' + ',' +''''+
      substring('Rajkot,Gandhinagar',charindex(',','Rajkot,Gandhinagar',0)+1,len('Rajkot,Gandhinagar'))+''''