Ricavare le stringhe INSERT con una Stored Procedures in SQL Server 7.0

di Claudio Barsi, in Classic ASP, Database,

Spesso capita di dover caricare dei record in una tabella SQL Server 7.0 prelevandoli da un altro database.

L'operazione puo' essere eseguita con il comando BCP, ma vi sono casi dove conviene non utilizzare questo comando. Ad esempio se i record da caricare non sono molti o se non si puo' disporre di un file di appoggio all'interno del quale scaricare il dump della tabella generato con il BCP.

Per questo ho realizzato una stored procedure che prende in input il nome della tabella e come output genera tante righe di INSERT quanti sono i record contenuti nella tabella.

--------------------
Create procedure GeneraInsert
@TableName nvarchar(255)
AS
set nocount on
declare @ColumnName varchar(8000)
, @ColumnType nvarchar(255)
, @ColOrder int
, @ExecStr varchar(8000)
, @HeadStr varchar(8000)
, @MaxCol int
, @ColList bit

set @ColList = 1
set @HeadStr = '('
select @MaxCol = MAX(ORDINAL_POSITION) from INformation_schema.columns
WHERE Table_Name=@TableName

declare ColumnList cursor scroll for
select COLUMN_NAME,DATA_TYPE,ORDINAL_POSITION from
information_schema.columns
WHERE Table_Name=@TableName ORDER BY ORDINAL_POSITION

open ColumnList
fetch first
from ColumnList
into @ColumnName, @ColumnType, @ColOrder
while @@fetch_status <> -1
begin
set @HeadStr = @HeadStr +
case when @ColOrder < @MaxCol then @ColumnName + ', '
else @ColumnName + ')'
end

fetch next
from ColumnList
into @ColumnName, @ColumnType, @ColOrder
end

if @ColList = 1
set @ExecStr = 'SELECT ''INSERT INTO ' + @TableName + ' ' + @HeadStr + '
VALUES ('' + '
else
set @ExecStr = 'SELECT ''INSERT INTO ' + @TableName + ' VALUES ('' + '

fetch first
from ColumnList
into @ColumnName, @ColumnType, @ColOrder

while @@fetch_status <> -1
begin

set @ExecStr = @ExecStr +
case when @ColumnType in ('tinyint', 'bit', 'smallint',
'int', 'money') then 'convert(varchar, ' + @ColumnName + ')'
when @ColumnType in ('datetime') then ''''''''' +
replace(convert(varchar, ' + @ColumnName + ', 102), ''.'', '''') + '''''''''

else '''N'' + '''''''' + ' +'replace(' + @ColumnName
+ ', '''''''', '''''''''''') + '''''' '''
end +
case when @ColOrder < @MaxCol then '+ '',''+'
else ' + '')'' FROM ' + @TableName
end
fetch next
from ColumnList
into @ColumnName, @ColumnType, @ColOrder
end

deallocate ColumnList

-- Visualizzazione della stringa che genera le INSERT
select @Execstr
-- Visualizzazione delle stringhe di INSERT
exec (@Execstr)
---------------------------------------

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi