-1

SQL Server には、次のようなクエリがあります (WHEREより大きなクエリの句の一部) 。

SELECT 1
WHERE TPR.GRDE_PK IN
     (
          SELECT CAST(String AS INT)
          FROM dbo.Split_New(@GRADES, ',')
     )

@Gradesは '14,15' に等しく、'14 ' と '15' を含むdbo.Split_New1 つの列が呼び出されたテーブルを返す関数です。タイプです。この行を実行しようとすると変換エラーが発生します。修正方法を教えてもらえますか?StringTPR.GRDE_PKINT

関数は次のようになりSplit_Newます(私よりも熟練した誰かが書いたので、すべてを理解していません):

function [dbo].[Split_New] ( 
@StringToSplit nvarchar(4000),
@Separator varchar(128))
returns table as return
with indices as
( 
select 0 S, 1 E
union all
select E, charindex(@Separator, @StringToSplit, E) + len(@Separator) 
from indices
where E > S 
)
select substring(@StringToSplit,S, 
case when E > len(@Separator) then e-s-len(@Separator) else len(@StringToSplit) - s +    1 end) String
--,S StartIndex        
from indices where S >0
4

2 に答える 2

1

問題は、TPR.GRDE_PK 値が整数であり、VARCHAR() としてキャストすることです。

SELECT 1
WHERE CAST(TPR.GRDE_PK AS VARCHAR(25)) IN
     (
          SELECT *
          FROM dbo.Split_New(@GRADES, ',')
     )

関数は正常に動作し、文字列が与えられたときに予想される結果のテーブルを返します。

または、LIKE を使用して関数をまったく使用しないようにすることもできます。

WHERE ','+CAST(TPR.GRDE_PK AS VARCHAR(25))+',' LIKE '%,'+@GRADES+',%'
于 2013-06-26T16:24:40.933 に答える