Foo adlı bir veritabanım ve bar adlı bir veritabanım var. Foo içinde tblFoobar (veri ve tüm) veritabanı foo veritabanı çubuğuna taşımak istediğiniz adlı bir tablo var. Bunu yapmak için SQL deyimi nedir?
Foo adlı bir veritabanım ve bar adlı bir veritabanım var. Foo içinde tblFoobar (veri ve tüm) veritabanı foo veritabanı çubuğuna taşımak istediğiniz adlı bir tablo var. Bunu yapmak için SQL deyimi nedir?
Yanıtlar:
SQL Server'da mı? ve aynı veritabanı sunucusunda? Üç parça adlandırma kullanın.
INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
Bu sadece verileri taşır. Tablo tanımını (ve izinler ve dizinler gibi diğer özellikler) taşımak istiyorsanız, başka bir şey yapmanız gerekir.
SQL Server Management Studio'nun "Verileri İçe Aktar" görevi (DB adına sağ tıkladıktan sonra görevler) bunun çoğunu sizin için yapar. Verileri kopyalamak istediğiniz veritabanından çalıştırın.
Tablolar yoksa, bunları sizin için oluşturacaktır, ancak muhtemelen herhangi bir dizin ve benzeri yeniden oluşturmanız gerekecektir. Tablolar varsa, varsayılan olarak yeni verileri ekler, ancak bunu (eşlemeleri düzenle) mevcut tüm verileri silmesi için ayarlayabilirsiniz.
Bunu her zaman kullanıyorum ve oldukça iyi çalışıyor.
WHERE
Verileri İçe Aktar görevini kullanarak bir koşul belirtmek mümkün mü ? Bunu yapmanın bir yolunu bulamadım.
Bu çalışmalı:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
Bu olacak değil constaints, varsayılan ya da dizinleri kopyalamak. Oluşturulan tablo olacak değil bir kümelenmiş bir dizin var.
Alternatif olarak şunları yapabilirsiniz:
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
Hedef tablonuz varsa ve boşsa.
INSERT INTO...
) benim için Oracle'da çalıştı.
Sadece bir masa varsa, tek yapmanız gereken
Dikkate almanız gereken bir şey, gelecekte diğer nesneleri taşıma gibi diğer güncellemelerdir. Kaynak ve hedef tablolarınızın aynı ada sahip olmadığını unutmayın. Bu, görünümler, saklı yordamlar ve diğer nesneler gibi bağımlı nesnelere de değişiklik yapmanız gerekeceği anlamına gelir.
Herhangi bir sorun olmadan manuel olarak gidebileceğiniz bir veya birkaç nesne. Ancak, sadece birkaç güncellemeden daha fazlası olduğunda 3. taraf karşılaştırma araçları çok kullanışlı olur. Şu anda şema geçişleri için ApexSQL Diff kullanıyorum, ancak başka bir araçla yanlış gidemezsiniz.
Senaryo create table
yönetim stüdyoda, tablo oluşturmak için çubuğunda o komut dosyasını çalıştırın. (Nesne gezgininde sağ tıklama tablosu, komut dosyası tablosu olarak, oluştur ...)
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
SET IDENTITY_INSERT TblName ON
durumda da yapmanız gerekecek .
Aşağıdakileri yapabilen SQL komut dosyalarının oluşturulmasına rehberlik etmek için SQL Server Komut Dosyaları Oluşturma Sihirbazı'nı da kullanabilirsiniz :
Burada gösterilen ekran görüntüleri ile SQL Server 2008 için iyi örnek iş akışı .
Şu şekilde gidebilirsiniz: (genel bir örnek)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
Ayrıca insert yan tümcesini koymak için sütun adlarını da oluşturmanız gerekiyorsa, şunu kullanın:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')
Sonucu kopyalayın ve tablo sütun adlarınızı temsil edecek şekilde sorgu penceresine yapıştırın; bu bile kimlik sütununu da hariç tutacaktır:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0
Veritabanlarının aynı konuma ait olması durumunda, satırları kopyalayacak komut dosyasının çalışacağını unutmayın.
Bunu deneyebilirsiniz.
select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>
Her iki DB de aynı sunucudaysa, sunucu adı isteğe bağlıdır.
Verileri Kopyala
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details