8

次のクエリがあります。

select * 
from cars 
where make in ('BMW', 'Toyota', 'Nissan')

私がしたいのは、SQL 変数に where パラメータを格納することです。

何かのようなもの:

declare @caroptions varchar(max);
select @caroptions =  select distinct(make) from carsforsale;
print @caroptions;
select * from cars where make in (@caroptions)

問題は、@caroptions以下から返された最後の結果のみを出力することです。

select distinct(make) from carsforsale;

複数の値を保存したい。

何か案は?

4

7 に答える 7

13

テーブル変数を使用できます。

declare @caroptions table
(
    car varchar(1000)
)

insert into @caroptions values ('BMW')
insert into @caroptions values ('Toyota')
insert into @caroptions values ('Nissan')

select * from cars where make in (select car from @caroptions)
于 2013-07-19T12:07:20.163 に答える
5

詳しく見たい方はこちらに書きました。その間、自分が考えているとおりにそれを行うことはできません。

選択肢は次のとおりです。

LIKE コマンドの使用:

DECLARE @CarOptions varchar(100)
SET @CarOptions = 'Ford, Nisan, Toyota'

SELECT *
FROM Cars
WHERE ','+@CarOptions+',' LIKE ',%'+CAST(Make AS varchar)+',%'

スプリッター機能

DECLARE @CarOptions varchar(100)
SET @CarOptions = 'Ford, Nisan, Toyota'

SELECT Cars.*
FROM Cars
JOIN DelimitedSplit8K (@CarOptions,',') SplitString
    ON Cars.Make = SplitString.Item

動的 SQL

DECLARE @CarOptions varchar(100)
SET @CarOptions = 'Ford, Nisan, Toyota'

DECLARE @sql nvarchar(1000)

SET @sql = 'SELECT * ' + 
            'FROM Cars ' + 
            'WHERE Make IN ('+@CarOptions+') '

EXEC sp_executesql @sql

それまでの間、あなたの最善の選択肢は、変数を完全に取り除くことです。

SELECT * FROM cars WHERE make IN (SELECT make FROM carsforsale );
于 2013-07-19T12:01:59.873 に答える
1

なぜだめですか?

SELECT * FROM cars WHERE make IN (SELECT DISTINCT(make) FROM carsforsale)
于 2013-07-19T12:08:49.963 に答える
0

JOIN ステートメントを使用できます。

SELECT distinct c.*
FROM cars c
JOIN carsfrosale s
ON s.id = c.fk_s

販売中の車のリストをフィルターしたい場合は、追加できます

WHERE s.id in (....)
于 2013-07-19T11:59:59.427 に答える