Neler yeni

PROSEDÜR 📌 MSSQL – Old DB → Yeni DB Tablo Kopyalama (TEK TABLO ADIYLA)

tades123

Yönetici
Katılım
10 Ocak 2025
Mesajlar
9
Tepkime puanı
2
Puanları
8
📌 MSSQL – Old DB → Yeni DB Tablo Kopyalama (TEK TABLO ADIYLA)

Merhaba arkadaşlar 👋
Bu paylaşımda, Old veritabanındaki herhangi bir tabloyu,
KO_DATABASE_SERVER_001 içine tek satırda tablo adı yazarak nasıl eksiksiz kopyalayabileceğinizi anlatıyorum.

Bu script özellikle:
• USERDATA
• ACCOUNT_CHAR
• KNIGHTS_USER
• WAREHOUSE
gibi tablolarda IDENTITY hatası yaşamadan kopyalama yapmak isteyenler için birebirdir.

---

🧠 Script Ne Yapıyor?

✔ Tablo adını sadece 1 yerden belirliyorsun
✔ Hedef tabloyu TRUNCATE ederek temizliyor
✔ IDENTITY kolonları otomatik dışarıda bırakıyor
✔ Old DB ile New DB arasında ortak kolonları buluyor
✔ Tüm satırları eksiksiz kopyalıyor
✔ "Cannot insert explicit value for identity column" hatası vermez

---

⚙️ Kullanım Talimatı

Aşağıdaki satırdan sadece tablo adını değiştirmeniz yeterlidir:

Kod:
DECLARE @TableName SYSNAME = 'ACCOUNT_CHAR';

Örnekler:
• USERDATA
• ACCOUNT_CHAR
• WAREHOUSE
• KNIGHTS_USER

---

📜 SQL KODU

Kod:
USE KO_DATABASE_SERVER_001;
GO

DECLARE @TableName SYSNAME = 'ACCOUNT_CHAR'; -- SADECE BURAYI DEĞİŞTİR
DECLARE @sql NVARCHAR(MAX) = '';
DECLARE @cols NVARCHAR(MAX) = '';

-- Ortak ve IDENTITY olmayan kolonları bul
SELECT @cols = STRING_AGG(QUOTENAME(c2.COLUMN_NAME), ', ')
FROM Old.INFORMATION_SCHEMA.COLUMNS c1
JOIN KO_DATABASE_SERVER_001.INFORMATION_SCHEMA.COLUMNS c2
    ON c1.COLUMN_NAME = c2.COLUMN_NAME
WHERE c1.TABLE_NAME = @TableName
  AND c2.TABLE_NAME = @TableName
  AND COLUMNPROPERTY(
        OBJECT_ID('KO_DATABASE_SERVER_001.dbo.' + @TableName),
        c2.COLUMN_NAME,
        'IsIdentity'
      ) = 0;

-- TRUNCATE + INSERT
SET @sql = '
TRUNCATE TABLE KO_DATABASE_SERVER_001.dbo.' + QUOTENAME(@TableName) + ';

INSERT INTO KO_DATABASE_SERVER_001.dbo.' + QUOTENAME(@TableName) + ' (' + @cols + ')
SELECT ' + @cols + '
FROM Old.dbo.' + QUOTENAME(@TableName) + ';
';

EXEC sp_executesql @sql;
GO

---

⚠️ Önemli Notlar

🔴 TRUNCATE işlemi tabloyu tamamen temizler
🔴 Foreign Key olan tablolarda TRUNCATE çalışmayabilir
🔴 Böyle durumlarda DELETE kullanılması gerekir

---

💡 Kimler İçin Uygun?

✔ Server taşıyanlar
✔ Backup’tan data çekenler
✔ Farm / PvP geçişi yapanlar
✔ USERDATA / ACCOUNT_CHAR kopyalama sorunu yaşayanlar

---

Umarım işinize yarar arkadaşlar,
takılan olursa konu altına yazabilir 👍
 
Üst Alt