Smu*_*ger 7 sql sql-server arrays variables stored-procedures
我有以下查询:
select *
from cars
where make in ('BMW', 'Toyota', 'Nissan')
Run Code Online (Sandbox Code Playgroud)
我想要做的是将where参数存储在SQL变量中.
就像是:
declare @caroptions varchar(max);
select @caroptions = select distinct(make) from carsforsale;
print @caroptions;
select * from cars where make in (@caroptions)
Run Code Online (Sandbox Code Playgroud)
问题是打印@caroptions只返回最后一个结果:
select distinct(make) from carsforsale;
Run Code Online (Sandbox Code Playgroud)
我希望它存储多个值.
有任何想法吗?
您可以使用表变量:
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)
Run Code Online (Sandbox Code Playgroud)
如果您想详细了解,我在这里写了相关内容。与此同时,你不能完全按照你的想法去做。
您的选择是:
使用 LIKE 命令:
DECLARE @CarOptions varchar(100)
SET @CarOptions = 'Ford, Nisan, Toyota'
SELECT *
FROM Cars
WHERE ','+@CarOptions+',' LIKE ',%'+CAST(Make AS varchar)+',%'
Run Code Online (Sandbox Code Playgroud)
分离器功能
DECLARE @CarOptions varchar(100)
SET @CarOptions = 'Ford, Nisan, Toyota'
SELECT Cars.*
FROM Cars
JOIN DelimitedSplit8K (@CarOptions,',') SplitString
ON Cars.Make = SplitString.Item
Run Code Online (Sandbox Code Playgroud)
动态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
Run Code Online (Sandbox Code Playgroud)
与此同时,你最好的选择是完全摆脱变量。
SELECT * FROM cars WHERE make IN (SELECT make FROM carsforsale );
Run Code Online (Sandbox Code Playgroud)