Allora ci stò arrivando, ho eliminato l'idea di una tabella temporanea e scrivo direttamente su tabella_2...
Ho creato una function split
codice:
CREATE FUNCTION [dbo].[Split]
(
@sString nvarchar(2048),
@cDelimiter nchar(1)
)
RETURNS @tParts TABLE ( part nvarchar(2048) )
AS
BEGIN
if @sString is null return
declare @iStart int,
@iPos int
if substring( @sString, 1, 1 ) = @cDelimiter
begin
set @iStart = 2
insert into @tParts
values( null )
end
else
set @iStart = 1
while 1=1
begin
set @iPos = charindex( @cDelimiter, @sString, @iStart )
if @iPos = 0
set @iPos = len( @sString )+1
if @iPos - @iStart > 0
insert into @tParts
values ( substring( @sString, @iStart, @iPos-@iStart ))
else
insert into @tParts
values( null )
set @iStart = @iPos+1
if @iStart > len( @sString )
break
end
RETURN
END
Ora con un cursore in una stored procedure inserisco i dati splittati in una colonna
codice:
USE [ddati]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[typedef]
( @Params varchar(300),
@Delimiter varchar(1))
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare
@type varchar(5),
@upd_sql varchar(255)
declare CUR Cursor for
select * from [dbo].[Split](@Params,@Delimiter)
set @upd_sql =
OPEN CUR
Fetch Next From CUR Into @type
While @@Fetch_Status = 0 Begin
Fetch Next From CUR Into @type
End -- End of Fetch
-- Insert statements for procedure here
END
ora provando a mano mi da questo risultato
codice:
exec Typedef "10;42;16", ';'
Ora l'ultima parte, ho già fatto gran parte del lavoro....
Devo fare in modo che quel 10 mi setti a 1 il docu_tipo10, il 42 mi setti a 1 docu_tipo42 sulla tabella_2. Puoi consigliarmi? ti prego scrivimi una parte di codice...