我想編寫一個查詢來選擇一些記錄,如下面的查詢,但@reseller
的類型爲nvarchar
,並且發生錯誤,它無法將nvarchar轉換爲int。我該如何解決它?將nvarchar轉換爲int
select * from Factor where code in (@reseller)
@reseller is '1,2,3'
我想編寫一個查詢來選擇一些記錄,如下面的查詢,但@reseller
的類型爲nvarchar
,並且發生錯誤,它無法將nvarchar轉換爲int。我該如何解決它?將nvarchar轉換爲int
select * from Factor where code in (@reseller)
@reseller is '1,2,3'
使用此函數,它分割字符串並返回表中的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
看看你必須選擇 @result和使用CAST聚合函數將其強制轉換爲INT這樣的:約CAST聚合函數
select * from Factor where code in (SELECT CAST(@reseller AS INT))
富勒更多信息,按照此: MSDN。 microsoft.com/en-us/library/ms187928.aspx