Ma fonction split estInsérer avec csv dans le tableau
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
prend en 3 deux entrées varchar
et un datetime
. Lorsque je teste cette fonction avec cette
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,'
)
Je reçois des valeurs propres
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
Maintenant, je suis en utilisant cette méthode pour insérer
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)
)
Mais je reçois une erreur sur insert
Msg 8114, niveau 16, état 5, procédure InsertNewEvent, L ine 0
Erreur lors de la conversion du type de données varchar en datetime.
Quelqu'un peut-il s'il vous plaît aidez-moi avec ça?
Merci
Merci pour la réponse. Je suis vraiment très confus maintenant. Je suis développeur et mon travail a été très limité du côté de la base de données. Pourrait être un peu plus précis sur ce que j'ai besoin de changer – DotNetBeginner
Vous devez changer le format de vos chaînes de date pour correspondre à un format de date approprié. Le champ datetime ne peut pas les accepter tels qu'ils sont. –
voulez-vous dire changer cette ligne pour correspondre au format de date approprié (SELECT REPLACE (CONVERT (VARCHAR, CAST (@ slice3 AS DATETIME), 106), '', '-') – DotNetBeginner