我想编写一个查询,选择一些记录,如下面的查询但@reseller
的类型为nvarchar
,并且发生错误,它无法将nvarchar转换为int。我该如何解决?
select * from Factor where code in (@reseller)
@reseller is '1,2,3'
答案 0 :(得分:0)
使用此函数,它会拆分字符串并返回表中的intvalue。
Create Function dbo.CsvToInt ( @Array varchar(1000))
returns @IntTable table (IntValue int)
AS
Begin
Declare @separator char(1)
Set @separator = ','
Declare @separator_position int
Declare @array_value varchar(1000)
Set @array = @array + ','
While patindex('%,%' , @array) <> 0
Begin
SELECT @separator_position = patindex('%,%' , @array)
SELECT @array_value = left(@array, @separator_position - 1)
Insert @IntTable Values (Cast(@array_value as int))
SELECT @array = stuff(@array, 1, @separator_position, '')
End
Return
End
用户定义函数的一大优点是它们可以在FROM子句中使用。我们可以像这样使用这个函数:
SELECT *
From dbo.CsvToInt('1,5,11')
which returns
IntValue
-----------
1
5
11
在你的情况下,你可以像我们一样
SELECT *
FROM Factor
WHERE code IN dbo.CsvToInt(@reseller)
查看here
答案 1 :(得分:-1)
您必须选择 @result并使用 CAST 聚合函数将其强制转换为INT,如下所示:
select * from Factor where code in (SELECT CAST(@reseller AS INT))
有关CAST聚合函数的更多信息,请按照下列步骤操作: msdn.microsoft.com/en-us/library/ms187928.aspx