次のクエリがあります。
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;
複数の値を格納したい。
何か案は?
テーブル変数を使用できます。
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)
詳細はこちら 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 );
何故なの?
SELECT * FROM cars WHERE make IN (SELECT DISTINCT(make) FROM carsforsale)
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
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
jOINステートメントを使用できます。
SELECT distinct c.*
FROM cars c
JOIN carsfrosale s
ON s.id = c.fk_s
あなたがcarsforsaleのあなたのリストをフィルタリングしたいなら、あなたは追加することができます
WHERE s.id in (....)