我的存储过程中有一个nvarchar(MAX),其中包含int值列表,我这样做 it is not possible to pass int list to my stored procedure ,但是,现在我遇到问题,因为我的数据类型是int,我想比较字符串列表 . 有没有办法可以做同样的事情?
---myquerry----where status in (@statuslist)
但是statuslist现在包含字符串值而不是int,那么如何将它们转换为INT?
UPDate:
USE [Database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP]
(
@FromDate datetime = 0,
@ToDate datetime = 0,
@ID int=0,
@List nvarchar(MAX) //This is the List which has string ids//
)
AS SET FMTONLY OFF; DECLARE @sql nvarchar(MAX),@ paramlist nvarchar(MAX)
SET @sql = 'SELECT ------ and Code in(@xList)
and -------------'
SELECT @paramlist = '@xFromDate datetime,@xToDate datetime,@xId int,@xList nvarchar(MAX)'
EXEC sp_executesql @sql, @paramlist,
@xFromDate = @FromDate ,@xToDate=@ToDate,@xId=@ID,@xList=@List
PRINT @sql
因此,当我实现拆分的函数时,我无法指定字符或分隔符,因为它不接受它作为 (@List,',').
或 (','+@List+',').
5 回答
可以使用XML参数将int列表发送到存储过程 . 这样您就不必再解决这个问题了,它是一个更好,更清洁的解决方案 .
看看这个问题:Passing an array of parameters to a stored procedure
或检查此代码项目:http://www.codeproject.com/Articles/20847/Passing-Arrays-in-SQL-Parameters-using-XML-Data-Ty
但是,如果您坚持按照自己的方式进行操作,则可以使用此功能:
像这样称呼它:
您也可以使用字符串列表 . 我经常做 .
实际上,您 can 通过创建
User Defined Table Type
将int
值列表发送到您的过程 . 但是,这意味着需要更多工作才能填充表参数 .在您的情况下,您可以使用sp_executesql存储过程来实现您想要的内容:
这是一个如何做的例子和Link以获取更多信息
您可以通过使用sql函数来执行此操作,该函数将返回一个整数数组 . 如果您将@Delimiter分隔的字符串传递给您之后可以正确处理的存储过程,那将会很棒 .
编写一个函数来分割数据如下
然后像下面这样使用它,我在这里使用(,)作为@Delimiter