如何在SQL Server存储过程中声明整数数组?

时间:2016-10-23 17:54:52

标签: sql-server entity-framework stored-procedures

我使用的是SQL Server 2012。

我有这个int []数组:

int[] arr = [1,23,4,3];
我作为参数发送到存储过程的

arr变量。

如何声明此变量?如何在SQL Server存储过程中声明整数数组?

2 个答案:

答案 0 :(得分:2)

SQL Server没有任何"数组"类型 - 如果您需要多个值的某些值,那么实际上只有一个构造:

如果您需要将多个值传递给存储过程,则应查看表值参数(TVP)。那些允许你发送一个"表变量"充满价值。

同样适用于您的存储过程 - 如果您需要处理多个值,请使用表变量(@MyTable)或"常规"临时表(#MyTempTable

答案 1 :(得分:1)

如上所述,SQL Server不支持数组,但是,任何Split / Parse函数都会支持

  

编辑包含在WHERE

Declare @String varchar(max) ='1,23,4,3'

Select * 
 From  Clients 
 Where Clients.Id IN ( Select RetVal from [dbo].[udf-Str-Parse](@String,','))

UDF(如果需要)

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table 
As
Return (  
    Select RetSeq = Row_Number() over (Order By (Select null))
          ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
    From (Select x = Cast('<x>'+ Replace(@String,@Delimiter,'</x><x>')+'</x>' as xml).query('.')) as A 
    Cross Apply x.nodes('x') AS B(i)
);
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')