8

我有以下查询:

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

我想要做的是将 where 参数存储在 SQL 变量中。

就像是:

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 回答
2

使用 CTE 将多个值存储到单个变量中。

;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
于 2019-01-15T09:23:01.923 回答
1
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
于 2014-09-09T07:55:29.173 回答
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 回答
0

在 TSQL 中,您可以通过这种方式使用 STRING_AGG

select STRING_AGG(car_name,',') as csv
from cars 
where make in ('BMW', 'Toyota', 'Nissan')
于 2021-04-28T12:54:57.260 回答