【发布时间】:2013-05-21 06:49:45
【问题描述】:
我的存储过程中有一个 nvarchar(MAX),其中包含 int 值列表,我这样做是因为 无法将 int 列表传递给我的存储过程, 但是,现在我遇到了问题,因为我的数据类型是 int,我想比较字符串列表。 有没有办法让我做同样的事情?
---myquerry----where status in (@statuslist)
但statuslist现在包含字符串值而不是int,那么如何将它们转换为INT?
更新日期:
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//
)
作为 设置 FMTONLY 关闭; 声明 @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+',')。
【问题讨论】:
-
好吧,您可以编写一个表值函数来拆分 int 值的字符串,或者如果您使用的是 SQL Server 2008+,则可以使用表值参数(不是真正使用它们,所以不确定如果它们 100% 适合此目的)
-
@Neil:请详细说明一下,你能给我一个链接吗?
-
这篇文章说明了我的意思:stackoverflow.com/questions/16040226/…
标签: sql string list stored-procedures casting