3

多くの情報を含む Vehicle テーブルを取得しましたが、列の 1 つが MSSQL テーブルの「所有者」です

しかし、所有者の 1 人は使用時に選択できませんが、使用する場合は選択でき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フィールドの最後にいくつかのスペース文字があります。'='演算子は末尾のスペースをスキップしますが、'演算子はスキップしません。

于 2013-01-30T10:42:23.583 に答える
4

列とパラメータを入れ替えてみてください

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

the following runs fine, I suspect a missing information

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

still works with

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

but fail if

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 に答える