web-dev-qa-db-ja.com

SQL ServerはSQL変数に複数の値を格納します

次のクエリがあります。

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;

複数の値を格納したい。

何か案は?

7
Smudger

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

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)
8

詳細はこちら here 書いてみました。その間、あなたは自分の考え方を正確に行うことはできません。

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

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 );
4
Kenneth Fisher

何故なの?

SELECT * FROM cars WHERE make IN (SELECT DISTINCT(make) FROM carsforsale)
1
Diego
Fetch 1 value in table and store in variable    
=======================================================================================

Declare @query int

    select @query = p.ProductID From Product p inner join ReOrdering as r on 
    p.ProductID = r.ProductID and r.MinQty >= p.Qty_Available

    print @query
1
Mohit Kotak

CTEを使用して複数の値を1つの変数に格納します。

;WITH DATA1 AS 
(
    select car_name
    from cars 
    where make in ('BMW', 'Toyota', 'Nissan')
)
SELECT @car_name = CONCAT(@car_name,',',car_name)
FROM DATA1

select @car_name
1
user10916093

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

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

あなたがcarsforsaleのあなたのリストをフィルタリングしたいなら、あなたは追加することができます

WHERE s.id in (....)
0
Joe Taras