2008年12月23日 星期二

使用sp_executesql來Create Database

因為任務需要建立20多個Database,當時就在想怎樣建立最快囉,想也知道要建很多個當然用T-SQL,不過在串接變數時發生問題,後來找到得使用sp_executesql來執行串接過的陳述式囉,如下,只要變更資料庫名稱跟磁碟名稱就好,用這樣建這樣很快囉

--2000 & 2005 適用
Declare @DBName nvarchar(20)
Declare @DBDataName nvarchar(25)
Declare @DBDataPath nvarchar(40)
Declare @DBLogName nvarchar(24)
Declare @DBLogPath nvarchar(44)
Declare @SQLcmd nvarchar(256)
Declare @DiskPath nvarchar(20)
--資料庫名稱
set @DBName = 'mis33tt'
--磁碟名稱
set @DiskPath = 'E:\'
set @DBDataName = @DBName + '_Data'
set @DBDataPath = @DiskPath + @DBDataName + '.MDF'
set @DBLogName = @DBName + '_Log'
set @DBLogPath = @DiskPath + @DBLogName + '.LDF'

set @SQLcmd = 'CREATE DATABASE ' + @DBName + ' ON (NAME = ''' + @DBDataName +
''', FILENAME = ''' + @DBDataPath + ''' , SIZE = 10, FILEGROWTH = 10%) LOG ON (NAME = ''' +
@DBLogName + ''', FILENAME = ''' + @DBLogPath + ''' , SIZE = 1, FILEGROWTH = 10%)' +
' COLLATE Chinese_Taiwan_Stroke_CI_AS'

exec sp_executesql @SQLcmd


注意: @SQLcmd 需為Unicode 字串喔,否則會出現下列錯誤
訊息 214,層級 16,狀態 2,程序 sp_executesql,行 12 程序需要有類型為 'ntext/nchar/nvarchar' 的參數 '@statement'。

0 意見:

張貼留言