2014-02-09 731 views
0

我想編寫一個查詢來選擇一些記錄,如下面的查詢,但@reseller的類型爲nvarchar,並且發生錯誤,它無法將nvarchar轉換爲int。我該如何解決它?將nvarchar轉換爲int

select * from Factor where code in (@reseller) 

@reseller is '1,2,3' 

回答

0

使用此函數,它分割字符串並返回表中的int值。

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

你必須選擇 @result和使用CAST聚合函數將其強制轉換爲INT這樣的:約CAST聚合函數

select * from Factor where code in (SELECT‌ CAST(@reseller AS‌ INT)) 

富勒更多信息,按照此: MSDN。 microsoft.com/en-us/library/ms187928.aspx