Database deki Tüm Tablolara Otomatik Insert Oluşturma

Sql Server da bulunan database deki tüm tablolara otomatik insert komutu oluşturan script

bu script le database deki veri leri kopyalamak için kullanabilir

sorguyu geliştirerek devir gibi işlemlerde kullanabilirsiniz

Bu sorguda autoincrement tipindeki alanlara insert yapılamayacağım autoincrement alanlar tespit edilip kolon bilgilier için getirilmemiştir


-- Geçici bir tablo oluştur
CREATE TABLE #InsertCommands (
    TableName NVARCHAR(128),
    InsertCommand NVARCHAR(MAX)
)

DECLARE @KaynakDatabase NVARCHAR(128)
DECLARE @HedefDatabase NVARCHAR(128)
DECLARE @TableName NVARCHAR(128)
DECLARE @SQL NVARCHAR(MAX)

SET @KaynakDatabase = '[Verilerin Alınacağı Database]'
SET @HedefDatabase = '[Verilerin Kopyalacanağı Database]'

DECLARE tableCursor CURSOR FOR
SELECT t.name
FROM sys.tables t
WHERE t.type = 'U'

OPEN tableCursor

FETCH NEXT FROM tableCursor INTO @TableName

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = 'INSERT INTO #InsertCommands (TableName, InsertCommand) SELECT ''' + @TableName + ''', 
                ''INSERT INTO ' + @HedefDatabase + '.[dbo].[' + @TableName + '] (' +
                STUFF((
                    SELECT ', [' + c.name + ']'
                    FROM sys.columns c
                    WHERE c.object_id = OBJECT_ID(@TableName) AND c.is_identity = 0
                    FOR XML PATH('')), 1, 2, '') + ') SELECT ' +
                STUFF((
                    SELECT ', [' + c.name + ']'
                    FROM sys.columns c
                    WHERE c.object_id = OBJECT_ID(@TableName) AND c.is_identity = 0
                    FOR XML PATH('')), 1, 2, '') + '   FROM ' + @KaynakDatabase + '.[dbo].' + '['+@TableName+']' + ''''

    EXEC sp_executesql @SQL

    FETCH NEXT FROM tableCursor INTO @TableName
END

CLOSE tableCursor
DEALLOCATE tableCursor

-- Geçici tablodaki sonuçları al
SELECT DISTINCT * FROM #InsertCommands  -- DISTINCT ile benzersiz sonuçlar alın

-- Geçici tabloyu temizle
DROP TABLE #InsertCommands