日期:2014-05-18  浏览次数:20406 次

Sql自定义Function参数被截断
下面函数的功能是:根据分割符@split来分割@str。
测试发现当@str长度超过100时,超出部分会被截断。请问如何正确传递长度大于100的@str给该函数,谢谢!!
测试用例:
DECLARE @machnos varchar(100)
SET @machnos='AB-01,AB-02,AB-04,AB-05,AB-06,AB-07,AB-08,AB-09,AB-10,AB-11,AB-12,AB-13,AB-14,AB-15,AB-16,AB-17,AB-28,AB-19,AB-20,AB-21,AB-22,AB-23,AB-24,AB-29,AB-32,AB-33,AB-34'
SELECT * FROM SplitStr(@machnos,',')
-----------------------------------------------
--自定义函数
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[SplitStr](@str nvarchar(max),@split nvarchar(100))
returns @t Table(col nvarchar(1000))
as begin  
declare @i int  
declare @s int  
set @i=1  
set @s=1  
while(@i>0)  
begin  
 set @i=charindex(@split,@str,@s)  
if(@i>0)  
begin  
insert @t(col) values(substring(@str,@s,@i-@s))  
 end  
else begin  
insert @t(col) values(substring(@str,@s,len(@str)-@s+1))  
end  
set @s = @i + 1  
 end  
return
end
----------------------------------------------

------解决方案--------------------
你定义的时候就应该 DECLARE @machnos varchar(8000)
------解决方案--------------------
SQL code
把 @split 定义为 nvarchar(max)