我有那个sql代码
SELECT * FROM table1
WHERE id IN (1,2,3,4,5,6)
我想要那个表达
DECLARE @allNeededIds ??? = (1,2,3,4,5,6)
SELECT * FROM table1
WHERE id IN @allNeededIds
我可以在SQL中声明这样的东西,还是应该使用表格,那么代码会如何?我使用MS Sql Server
答案 0 :(得分:9)
使用表变量:
DECLARE @allNeededIds table(id int not null)
insert into @allNeededIds (id) values (1),(2),(3),(4),(5),(6)
SELECT * FROM table1
WHERE id IN (select id from @allNeededIds)
如果您想将这组值从外部源传递到此代码中(例如,在存储过程中调用此代码或从其他语言运行它),您应该查看Table-Valued parameters
答案 1 :(得分:3)
您可以使用动态SQL执行此操作。
D:\TFS\local_profile.ps1
答案 2 :(得分:2)
你可以做的是这样的事情:
SELECT *
FROM table1
WHERE id IN (SELECT id FROM table2)
在哪种情况下SELECT id FROM table2
会返回值1到6。
当然,如果内部SELECT
将返回的值多于您需要的值,则需要使用额外的WHERE
子句来调整查询,以仅过滤所需的值。 / p>
答案 3 :(得分:1)
首先创建一个Split函数,它将逗号分隔的字符串作为输入并返回一个表:
CREATE FUNCTION [dbo].Split(@input AS Varchar(4000) )
RETURNS
@Result TABLE(Value BIGINT)
AS
BEGIN
DECLARE @str VARCHAR(20)
DECLARE @ind Int
IF(@input is not null)
BEGIN
SET @ind = CharIndex(',',@input)
WHILE @ind > 0
BEGIN
SET @str = SUBSTRING(@input,1,@ind-1)
SET @input = SUBSTRING(@input,@ind+1,LEN(@input)-@ind)
INSERT INTO @Result values (@str)
SET @ind = CharIndex(',',@input)
END
SET @str = @input
INSERT INTO @Result values (@str)
END
RETURN
END
其次,这样做是为了得到结果:
DECLARE @allNeededIds as varchar(max)
set @allNeededIds = '1,2,3,4,5,6'
select value into temp from Split(@allNeededIds)
最终查询将是:
SELECT * FROM table1
WHERE id IN (select value in temp)