T sql select int 值作为铸造 varchar

T sql select int value as casting varchar

我有一个名为 GetReport 的存储过程

customers.branches_ID is int type 

但是@Branches 参数是 varchar

@Branches 是“10,13534,554,776,767”

我想在 branches_ID 中搜索 10,13534,554,776,767 但是如果我 cast/convert 到 varchar 它对我不起作用。

ALTER PROCEDURE [dbo].[GetReport] 

@fromDate datetime,
@toDate datetime,
@Branches varchar (500) = null

AS
BEGIN

SET NOCOUNT ON; 

select * from customers where

(customers.CreatedDate between @fromDate and @toDate) and

(@Branches is null or CONVERT(varchar(500), customers.branches_ID) in(@Branches )) -- This part is not working for me


END

如何解决这个问题如何在 int 列中搜索多个逗号 varcvhar?

谢谢。

至少有4种方法。这是一个:

select * from customers where
customers.CreatedDate between @fromDate and @toDate and 
(@Branches is null or branches_ID
    IN(
         SELECT  y.i.value('(./text())[1]', 'nvarchar(4000)')
         FROM    ( SELECT    x = CONVERT(XML, '<i>' + REPLACE(@Branches, ',', '</i><i>')
                    + '</i>').query('.')
                 ) AS a
         CROSS APPLY x.nodes('i') AS y ( i )))

在这里寻找其他方法http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx

但是如果您使用 Sql Server 2008 或更高版本,您可以对此类工作使用 table 值类型。