Tsql 根据值的范围筛选ID列

Tsql 根据值的范围筛选ID列,tsql,Tsql,我有以下SQL: SELECT ',' + LTRIM(RTRIM(CAST(vessel_is_id as CHAR(2)))) + ',' AS 'Id' FROM Vessels WHERE ',' + LTRIM(RTRIM(CAST(vessel_is_id as varCHAR(2)))) + ',' IN (',1,2,3,4,5,6,') 基本上,我想根据作为varchar传递到存储过程中的整数值的变量列表过滤容器_is_id。现在,上面的SQL不起作用。表中确实有“Vesse

我有以下SQL:

SELECT ',' + LTRIM(RTRIM(CAST(vessel_is_id as CHAR(2)))) + ',' AS 'Id'
FROM Vessels
WHERE ',' + LTRIM(RTRIM(CAST(vessel_is_id as varCHAR(2)))) + ',' IN (',1,2,3,4,5,6,')
基本上,我想根据作为varchar传递到存储过程中的整数值的变量列表过滤容器_is_id。现在,上面的SQL不起作用。表中确实有“Vesser\u is\u id”为1的行,但它们没有返回

有人能为我推荐一个更好的方法吗?或者,如果上述条件可以的话

编辑:

样本数据

| vessel_is_id |
| ------------ |
|      1       |
|      2       |
|      5       |
|      3       |
|      1       |
|      1       |
因此,我想返回上述所有内容,其中vessel_is_id位于变量过滤器中,即“1,3”-它应该返回4条记录

干杯。
由于SQL Server没有数组,所以您可能需要考虑将一组值传递为XML类型。然后,可以将XML类型转换为关系并对其进行连接。例如,利用久经考验的pubs数据库。当然,您的客户可能很容易生成参数值的XML,也可能不容易,但是这种方法不受sql注入的影响,而大多数逗号分隔的值方法都不是

declare @stateSelector xml
set @stateSelector = '<values>
<value>or</value>
<value>ut</value>
<value>tn</value>
</values>'

select * from authors 
where state in ( select c.value('.', 'varchar(2)') from @stateSelector.nodes('//value') as t(c))

由于SQLServer没有数组,您可能需要考虑将一组值传递为XML类型。然后,可以将XML类型转换为关系并对其进行连接。例如,利用久经考验的pubs数据库。当然,您的客户可能很容易生成参数值的XML,也可能不容易,但是这种方法不受sql注入的影响,而大多数逗号分隔的值方法都不是

declare @stateSelector xml
set @stateSelector = '<values>
<value>or</value>
<value>ut</value>
<value>tn</value>
</values>'

select * from authors 
where state in ( select c.value('.', 'varchar(2)') from @stateSelector.nodes('//value') as t(c))
你可以这样申请:

SELECT * FROM dbo.fn_ArrayToTable('2,3,4,5,2,2')
就你而言:

SELECT  LTRIM(RTRIM(CAST(vessel_is_id AS CHAR(2)))) AS 'Id'      
FROM Vessels      
WHERE    LTRIM(RTRIM(CAST(vessel_is_id AS VARCHAR(2)))) IN (SELECT data FROM dbo.fn_ArrayToTable('1,2,3,4,5,6')
你可以这样申请:

SELECT * FROM dbo.fn_ArrayToTable('2,3,4,5,2,2')
就你而言:

SELECT  LTRIM(RTRIM(CAST(vessel_is_id AS CHAR(2)))) AS 'Id'      
FROM Vessels      
WHERE    LTRIM(RTRIM(CAST(vessel_is_id AS VARCHAR(2)))) IN (SELECT data FROM dbo.fn_ArrayToTable('1,2,3,4,5,6')

请显示存储在数据库中的样本数据和样本预期结果。请显示存储在数据库中的样本数据和样本预期结果。我将试一试。我目前正处于另一个任务的中间,但稍后会给你反馈。我目前正处于另一个任务的中间,但稍后会给你反馈。