我为此使用了参数化查询。我传递一个逗号分隔的唯一标识符字符串到这个查询的参数被拆分。它使用一对唯一的标识符可以正常工作,但我认为我的最大值达到了2000个字符。ASP.NET/SQL Server:从字符串转换为uniqueidentifier时转换失败
我有大约150个areaID和选择几个查询工作正常。从字符串转换为 唯一标识符时,选择所有查询失败的领域,并返回
转换失败。
对于在没有遇到这个问题的情况下获取更多值到查询的任何建议吗?
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
“@ AreaIDs”的数据类型和'dbo.Split'中定义的参数是什么?如果其中任何一个都是'[n] varchar(2000)',那么就有你的答案。 [你可以看看TVPs。](http://www.sommarskog.se/arrays-in-sql-2008.html) –
你能分享你的Split功能的来源吗?这不是ms sql server的内置函数。 –
我正在使用一个asp.net控制参数来传递唯一标识的逗号dilemmeted字符串。 –
user1751121