我使用的是SQL Server 2012。
我有这个int []数组:
int[] arr = [1,23,4,3];
我作为参数发送到存储过程的 arr
变量。
如何声明此变量?如何在SQL Server存储过程中声明整数数组?
答案 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',',')