2009-01-14 33 views
27

ms sql 2008 kullanıyorum ve başka bir veritabanına başvuran bir veritabanı adı oluşturmaya çalışıyorum. Örneğin, 'Dev', 'Test', 'Demo' çoklu yapılandırma dosyalarından referans alabileceğim veritabanı isimleri olurdu, ancak her isim 'db20080101' veya 'db20080114' gibi başka bir veritabanına işaret eder.Veritabanı Adı için Sql Translation veya "Alias" nasıl oluşturulur?

[Düzenle] yapılandırmaları bazıları i kodunu kontrol eder ve bazıları değildir uygulamalar içindir (örn. MS Raporlama hizmeti veri kaynağı dosya yapılandırmaları) [/ Düzenle]

O Sqlserver sadece eş anlamlılarını destekler görünüyor Görünüm, Tablo, Sproc veya İşlev. Ve Alias ​​'masa ve sütun isimleri içindir.

Dokümanlarda kaçırdığım bir yolu var mı? Herhangi bir çözüm hakkında herhangi bir öneriniz var mı?

+2

+1. Bizim durumumuzda DB-to-DB çağrısı yapmamız gerekiyor, hedef sunucu Test ve Prodüksiyona göre farklılık gösteriyor, ve Biz her zaman – STW

cevap

4

kullanımı 3 kısım gösterimi ve masaya takma isim, örnek

select * from tempdb.dbo.sysobjects a 
join master.dbo.sysobjects b on a.id = b.id 
+0

her sürüm ile bu tabloları denemek için denedim hatırlamak zorunda kalmak istemiyorum ve gr çalıştı yemek. Ancak, her bir tablo, işlev, görünüm ve orijinal db sproc için yeni db eşanlamlı oluşturmak gerekir inanıyorum? 5 veya 6 yapılandırma dosyası var, bu yüzden onları değiştirmenin daha az masraf olacağını düşünüyorum. –

1

başka yapılandırma dosyasını kullanarak buna benzer bir şey yaptık.

Yeni yapılandırma dosyası, genel adınızı bu veritabanına (db adı, kullanıcı adı, parola vb.) Bağlanmak için gereken tüm bilgilere eşler ve daha sonra bağlantı işleviniz genel adınızı bir argüman olarak alır.

db.config:

DEV_DB_NAME = db20080101 
DEV_DB_USER = dev_user 
DEV_DB_PASS = dev_pass 
TEST_DB_NAME = db20070101 
TEST_DB_USER = test_user 
TEST_DB_PASS = test_pass 

bağlantı kodu:

db_connection get_connection(string prefix) { 
    db_connection db_conn = new db_connection; 
    string db_name = get_config_value(config_path, prefix + "_DB_NAME"); 
    string db_user = get_config_value(config_path, prefix + "_DB_USER"); 
    string db_pass = get_config_value(config_path, prefix + "_DB_PASS"); 

    db_conn.connect(db_name, db_user, db_pass); 

    return db_conn; 
} 

Sonra sadece argüman olarak db takma adı ile get_connection() diyoruz.

+0

iyi düşünülmüş, ancak kullanılan uygulamaların bazıları benim değildir ve bağlantı dizesini (örneğin MS Raporlama Hizmetleri) nasıl oluşturduklarını kontrol edemiyorum. Sorumu, bunu yansıtmak için güncelledim. –

+0

Evet, bu yalnızca kodu kontrol ettiğinizde çalışır. Cevabınızı bulmada iyi şanslar, ne zaman yaparsanız yapın. –

1

Bağlantılı bir sunucu kullanarak bunu simüle etmenin bir yolu vardır. Bu, bir tane geliştirme/test ve bir tane canlı olmak üzere aynı veritabanı kümesine sahip iki SQL sunucunuz olduğunu varsayar. geliştirme/test sunucusunda

  1. Açık SQL Server Management Studio
  2. sağ tıklayın Sunucusu Nesne> Bağlantılı Sunucular
  3. Seç Yeni Bağlantılı Sunucu
  4. ...Bu normalde sağlayıcısına
  5. olarak canlı sunucu
  6. Seç SQL yerel istemci adı olurdu için sql_server girin -
  7. takma Bağlantılı sunucu alanında adını belirtin Genel sayfa
  8. seçin Ürün Adı
  9. Veri Kaynağında, numaralı telefonun gelişimini belirtin. server
  10. Ekle Güvenlik ve Sunucu Seçenekleri tatmaya
  11. Tamam'ı

yukarıdaki SQL Server 2005 için ama böyle SQL yazabilirsiniz Bunu yaptıktan sonra 2008

için benzer olmalıdır:

SELECT * FROM liveservername.databasename.dbo.tablename 

Artık betikleriniz bağlı sunucuya sahip geliştirme sunucusunda kendilerine döndüklerinde, veriyi geliştirme sunucusundan doğru şekilde çekerek çalışırlar ve aynı komut dosyaları canlı sunucuda çalıştırıldığında normal çalışırlar ly.

+1

Bu, yeniden kodlanmış bir veritabanı adı gerektirir. –

0

Bu, muhtemelen her durumda yardımcı olmayacağını biliyorum, ancak hala görüntüleme kullanma seçeneğiniz var. Uygun bir kimlik anahtarına sahip olduğu sürece (Birincil Anahtar) bir görünüm ekleyebilir, silebilir, güncelleyebilirsiniz. Bunu başka bir veritabanına yönlendirirseniz, farklı şemaları almak için düşüp yeniden oluşturmalısınız (üretim ve test arasında çalışırken, test ve/veya üretimdeki şemada değişiklik yaparken.)

Eş anlamlılar Başka bir veritabanına gittiğinizde ve 3 veya 4 parçalı bir isme sahip olduğunuzda, ancak bunu yapmak istediğinizde ayarlanmış bir adınız olabilir, bağlantılı bir sunucu da çalışır. her iki veritabanında da aynıdır ve sadece prod ve test arasında işaret ediyorsunuz.