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
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
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Eseguire script pre e post esecuzione di un workflow di GitHub
- Creare una libreria CSS universale: Cards
- Migliorare l'organizzazione delle risorse con Azure Policy