我的拆分功能是
ALTER FUNCTION [dbo].[SplitString](@String varchar(8000), @String2 varchar(8000), @String3 varchar(8000))
returns @temptable TABLE (items varchar(8000), items2 varchar(8000), items3 datetime)
as
begin
declare @idx int
declare @slice varchar(8000)
declare @idx2 int
declare @slice2 varchar(8000)
declare @idx3 int
declare @slice3 varchar(8000)
declare @Delimiter char(1) = ','
select @idx = 1
if len(@String)<1 or @String is null return
select @idx2 = 1
if len(@String)<1 or @String is null return
select @idx3 = 1
if len(@String)<1 or @String is null return
while @idx!= 0 AND @idx2!= 0 AND @idx3!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
set @idx2 = charindex(@Delimiter,@String2)
if @idx2!=0
set @slice2 = left(@String2,@idx2 - 1)
else
set @slice2 = @String2
set @idx3 = charindex(@Delimiter,@String3)
if @idx3!=0
set @slice3 = left(@String3,@idx3 - 1)
else
set @slice3 = @String3
if(len(@slice)>0 AND len(@slice2)>0 AND len(@slice3)>0)
insert into @temptable(Items,items2,items3) values(@slice, @slice2, (SELECT REPLACE(CONVERT(VARCHAR, CAST(@slice3 AS DATETIME), 106), ' ', '-') ))
set @String = right(@String,len(@String) - @idx)
set @String2 = right(@String2,len(@String2) - @idx2)
set @String3 = right(@String3,len(@String3) - @idx3)
if (len(@String) = 0 AND len(@String2) = 0 AND len(@String3) = 0) break
end
return
end
它接受 3 个输入 2varchar
和 1 datetime
。当我用这个测试这个功能时
select * From dbo.SplitString
(
'Comments1,Comments2,Comments3,',
'UserName1,UserName2,UserName3,',
'1/1/2013 12:00:00 AM,2/2/2013 12:00:00 AM,3/3/2013 12:00:00 AM,'
)
我得到了正确的价值观
Comments1 UserName1 2013-01-01 00:00:00.000
Comments2 UserName2 2013-02-02 00:00:00.000
Comments3 UserName3 2013-03-03 00:00:00.000
现在我用它来插入
SELECT @ID = SCOPE_IDENTITY()
DECLARE @Comments = 'Comments1,Comments2,Comments3,'
DECLARE @UserName = 'UserName1,UserName2,UserName3,',
DECLARE @EntryDate = '1/1/2013 12:00:00 AM,2/2/2013 12:00:00 AM,3/3/2013 12:00:00 AM,'
INSERT INTO dbo.EventActivationComments
(
EventID,
Comments,
UserName,
EntryDate
)
(
SELECT @ID, * FROM dbo.SplitString(@Comments,@UserName,@EntryDate)
)
但我在插入时遇到错误
消息 8114,级别 16,状态 5,过程 InsertNewEvent,第 0 行将
数据类型 varchar 转换为日期时间时出错。
谁能帮我解决这个问题?
谢谢