SORU
7 NİSAN 2009, Salı


Nasıl T-SQL veritabanı adı için bir değişken kullanmak?

Benim senaryoda birçok yerde veritabanı adını kullanıyorum ve böyle bir şey arıyordum çok hızlı bir şekilde değiştirmek mümkün olmak istiyorum

DECLARE @DBNAME VARCHAR(50)
SET @DBNAME = 'TEST'

CREATE DATABASE @DBNAME
GO
ALTER DATABASE @DBNAME SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE @DBNAME SET RECOVERY SIMPLE 
GO

Ama çalışmıyor. Bu kodu yazmak için doğru yolu nedir?

CEVAP
7 NİSAN 2009, Salı


Şablon bir dize içine tüm komut dosyası koymak, {SERVERNAME} yer tutucuları. Sonra Dize kullanarak düzenleyin:

SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)

ve çalıştırın

EXECUTE (@SQL_SCRIPT)

Sabit, üç yıl boyunca, hiç kimse benim kod olduğunu fark ettim bu yüzdenişe yaramıyor!

Sen mi EXEC birden çok toplu. GO toplu iş ayırıcı, T-SQL deyim değildir. Gerekli üç ayrı dizeleri oluşturmak için, ve sonra yerine koyma sonra EXEC her biri için.

Bir şey "" GO; ADO.NET kod böyle bir şey yapmadım bölerek birden çok satır tek şablon dize kırarak. zeki yapabilir sanırım

Ve burada sözü aldım""? SERVERNAME

İşte ben sadece (ve işleri) test kodu:

DECLARE @DBNAME VARCHAR(255)
SET @DBNAME = 'TestDB'

DECLARE @CREATE_TEMPLATE VARCHAR(MAX)
DECLARE @COMPAT_TEMPLATE VARCHAR(MAX)
DECLARE @RECOVERY_TEMPLATE VARCHAR(MAX)

SET @CREATE_TEMPLATE = 'CREATE DATABASE {DBNAME}'
SET @COMPAT_TEMPLATE='ALTER DATABASE {DBNAME} SET COMPATIBILITY_LEVEL = 90'
SET @RECOVERY_TEMPLATE='ALTER DATABASE {DBNAME} SET RECOVERY SIMPLE'

DECLARE @SQL_SCRIPT VARCHAR(MAX)

SET @SQL_SCRIPT = REPLACE(@CREATE_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)

SET @SQL_SCRIPT = REPLACE(@COMPAT_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)

SET @SQL_SCRIPT = REPLACE(@RECOVERY_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • Excel Functions

    Excel Functi

    4 NİSAN 2010
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013