3

我有一个载有大量信息的 Vehicle 表,但其中一列是 MSSQL 表中的“所有者”

但是当我使用时我无法选择其中一位所有者,LIKE但如果我使用则可以=

'Silkeborg Distributionscenter' 是所有者(是的,表格和参数中都有一个双空格)

所以参数是:

DECLARE @Owners nvarchar(MAX) = 'Silkeborg  Distributionscenter'

我试过:

SELECT * FROM Vehicle WHERE @Owners = Owner 
--This gave me all the correct results

然后:

SELECT * FROM Vehicle WHERE @Owners LIKE Owner
--No result

然后:

SELECT * FROM Vehicle WHERE @Owners COLLATE Danish_Norwegian_CI_AS LIKE Owner COLLATE Danish_Norwegian_CI_AS
--No result

我需要使用 LIKE,因为我需要能够一次选择一组所有者。所以原来的select语句是这样的

SELECT * FROM Vehicle WHERE ('|' + @Owners + '|' like '%|' + Owner + '|%')
--No result

有任何想法吗?

编辑: 一切正常@Owners 是“Fredericia Distributionscenter”但不是“Silkeborg Distributionscenter”,它们都在表内。

“Silkeborg Distributionscenter”文本中的内容是否有效?

4

5 回答 5

7

按要求提升为答案。

Vehicle 表中 Owner 字段的末尾有一些空格字符。'=' 运算符跳过尾随空格,'like' 运算符不跳过。

于 2013-01-30T10:42:23.583 回答
4

尝试交换列和参数

SELECT * 
FROM   Vehicle 
WHERE  Owner LIKE '%' + @Owners + '%'
于 2013-01-30T08:55:46.430 回答
2

以下运行正常,我怀疑缺少信息

declare @t  table (
    owner nvarchar(50)
)

insert into @t values ('Silkeborg  Distributionscenter'), ('rzrzezer')

declare @owner nvarchar(max) = 'Silkeborg  Distributionscenter'

select * from @t
-- two lines
select * from @t where @owner = owner
-- one line
select * from @t where @owner like owner
-- one line

仍然适用于

set @owner = 'Silkeborg  Distributionscenter|another one'
select * from @t where '|' + @owner + '|'  like '%|' + owner + '|%'
-- one line

但如果失败

insert into @t values ('Silkeborg  Distributionscenter|abc')
select * from @t where '|' + @owner + '|'  like '%|' + owner + '|%'
-- one line, you may expect 2 in this case consider using a many to many relation
于 2013-01-30T09:27:51.370 回答
1

您的查询不正确。像这样写:

SELECT * FROM Vehicle WHERE Owners like '%' + @Owners + '%'
于 2013-01-30T08:57:29.840 回答
0
DECLARE @Owners nvarchar(MAX) = '%Silkeborg  Distributionscenter%'

SELECT * 
FROM   Vehicle 
WHERE  Owner LIKE @Owners

或者你也可以传递一个修改过的参数,这在从前端传递参数时使用

于 2013-01-30T09:19:40.213 回答