これにはパラメータ化されたクエリを使用しています。分割されたこのクエリのパラメーターに、一意の識別子のコンマ区切りの文字列を渡しています。いくつかの一意の識別子を使用すると正常に機能しますが、最大値は約 2000 文字に達していると思います。
約 150 の areaID があり、いくつかを選択するとクエリが正常に機能します。すべての領域を選択すると、クエリは失敗して返されます
文字列からuniqueidentifierへの変換で変換に失敗しました。
この問題に遭遇することなく、より多くの値をクエリに取得するための提案はありますか?
Area.AreaID IN (SELECT CONVERT(UNIQUEIDENTIFIER, Value) FROM dbo.Split(@AreaIDs,','))
/
USE [Triton2]
GO
/****** Object: UserDefinedFunction [dbo].[Split] Script Date: 12/11/2012 11:39:39 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Split]
(
@List nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Value uniqueidentifier
)
AS
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
Insert Into @RtnValue (Value)
Select Value = ltrim(rtrim(@List))
Return
END