Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/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 在T-SQL中搜索Varchar和Integer列_Sql Server_Tsql - Fatal编程技术网

Sql server 在T-SQL中搜索Varchar和Integer列

Sql server 在T-SQL中搜索Varchar和Integer列,sql-server,tsql,Sql Server,Tsql,我的应用程序中有一个搜索功能,可以搜索特定列的字符串值。搜索文本作为参数传递给过程。现在我必须搜索另一列,它是另一个表中的整数。输入参数是1,但现在我必须在两列中搜索并根据该参数返回结果 //查询: @SearchText VARCHAR(8000) = '' SELECT DISTINCT Id, TransactionId, wfdFieldValue where (wfdFieldValue LIKE '%' + @SearchText + '%' OR @SearchText = '

我的应用程序中有一个搜索功能,可以搜索特定列的字符串值。搜索文本作为参数传递给过程。现在我必须搜索另一列,它是另一个表中的整数。输入参数是1,但现在我必须在两列中搜索并根据该参数返回结果

//查询:

@SearchText VARCHAR(8000) = ''

SELECT DISTINCT Id, TransactionId, wfdFieldValue 
where (wfdFieldValue LIKE '%' + @SearchText + '%' OR @SearchText = '')
在上面的查询中,我必须在where条件中包含TransactionId。因此,如果用户使用TransactionId或Fieldvalue进行搜索,查询将返回结果

注意:TransactionId是一个整数数据类型

SELECT DISTINCT Id, TransactionId, wfdFieldValue 
where wfdFieldValue LIKE '%' + @SearchText + '%' 
OR @SearchText = '' 
OR CAST(TransactionId AS VARCHAR(50)) LIKE '%' + @SearchText + '%' 

演员阵容应该可以解决这个问题,但我会首先考虑可能的设计改进

如果我理解正确,您将希望在任一列中单击,以使该行显示在搜索结果中。在这种情况下,您需要一个简单的

SELECT DISTINCT Id, TransactionId, wfdFieldValue 
FROM bop
WHERE @SearchText='' OR 
       wfdFieldValue LIKE '%' + @SearchText + '%' OR 
       TransactionId LIKE '%' + @SearchText + '%'
(您可以直接在整数列上使用
LIKE
,而无需手动转换。)


不过需要注意的是,这种带有前导
%
的通配符搜索没有以最佳方式使用索引,随着表的增长,此查询的性能很可能不会很好。

我不确定我是否理解。您想要点击
wfdieldValue
上的子字符串匹配,或者点击
TransactionId
上的精确匹配?@JoachimIsaksson:我需要使用类似
的功能在两列中搜索。桑迪:我认为目前最简单的方法是在两列上添加索引,这样优化器就可以进行索引扫描而不是表扫描。在数据量变得非常大之前,这应该可以正常工作。如果数据量非常大,最极端的选择是创建一个添加了所有后缀的搜索表(例如,TransId 1234将索引1234、234、34、4),这样您就可以在不使用前导通配符的情况下进行搜索,但我怀疑在您真正需要之前您是否会想去那里。根据版本的不同,可能还有其他特定于SQL server的索引选项。您可能需要咨询您的DBA:)