简体   繁体   English

使用VBS(SQL DMO)创建SQL Server 2008 R2数据库时出错

[英]Error when creating a SQL Server 2008 R2 database using VBS (SQL DMO)

I used to run a script in VBS using SQL-DMO to create a new database. 我曾经使用SQL-DMO在VBS中运行脚本来创建新数据库。 This was done for SQL Server 2000 however this is no longer working under SQL Server 2008 R2. 这是为SQL Server 2000完成的,但是在SQL Server 2008 R2下不再起作用。

Script is like this: 脚本是这样的:

Const C_SQL_UID = "sa"
Const C_SQL_PWD = "sa"
Const C_SQL_SERVER = "dbserver"
Const C_SQL_TMPDBNAME = "TMP_DB"
Const C_SQLDIR = "d:\data"

Dim SqlServer: Set SqlServer = CreateObject("SQLDMO.SqlServer")
SqlServer.Connect C_SQL_SERVER, C_SQL_UID, C_SQL_PWD

Dim database: Set database = CreateObject("SQLDMO.Database")
Dim dbDataFile: Set dbDataFile = CreateObject("SQLDMO.DBFile")
Dim dbLogFile: Set dbLogFile = CreateObject("SQLDMO.LogFile")

database.Name = C_SQL_TMPDBNAME

dbDataFile.Name = C_SQL_TMPDBNAME
dbDataFile.PhysicalName = C_SQLDIR & "\" & C_SQL_TMPDBNAME & "_Data.mdf"
dbDataFile.PrimaryFile = True
dbDataFile.Size = 2
dbDataFile.FileGrowthType = 0 'SQLDMOGrowth_MB
dbDataFile.FileGrowth = 1

database.FileGroups.Item("PRIMARY").DBFiles.Add(dbDataFile)

dbLogFile.Name = C_SQL_TMPDBNAME & "Log"
dbLogFile.PhysicalName = C_SQLDIR & "\" & C_SQL_TMPDBNAME & "_Log.ldf"
dbLogFile.Size = 2

database.TransactionLog.LogFiles.Add(dbLogFile)

On Error Resume Next
SqlServer.Databases.Add(database)
If Err Then
    wscript.echo Now & " Error creating DB (" & Err.Number & ") " & Err.Description
End If
On Error GoTo 0

When it executes the final instruction ("SqlServer.Databases.Add(database)"), I get the error number -2147219701 ... which doesn't contain any description. 当它执行最后一条指令(“ SqlServer.Databases.Add(数据库)”)时,出现错误号-2147219701 ...,其中不包含任何描述。 I'm not sure where it can comes from. 我不确定它的来源。 I know that Microsoft dropped the DMO thing, but since SMO doesn't support VBScript I'm kinda out of options. 我知道Microsoft放弃了DMO,但由于SMO不支持VBScript,所以我选择不了。

Any ideas? 有任何想法吗?

Oh well, in the end I just used a good old ADODB connections and made all the requests in T-SQL. 哦,好了,最后,我只使用了一个很好的旧ADODB连接,并在T-SQL中发出了所有请求。 For this script it's simply : 对于此脚本,它很简单:

Dim conn
Set conn = CreateObject("ADODB.Connection")
conn.CommandTimeout = 9999
conn.Provider = "SQLOLEDB"
conn.ConnectionTimeout = 10
conn.Open "server=" & C_SQL_SERVER & ";uid=" & C_SQL_UID & ";pwd=" & C_SQL_PWD & ";database=Master"

sql = "CREATE DATABASE " & C_DB_NAME & " "
sql = sql & "ON ( NAME = '" & C_DB_NAME & "', FILENAME = '" & C_SQLDIR & "\" & C_DB_NAME & "_Data.mdf', SIZE = 5MB, MAXSIZE = UNLIMITED, FILEGROWTH = 5MB ) "
sql = sql & "LOG ON( NAME = '" & C_DB_NAME & "Log', FILENAME = '" & C_SQLDIR & "\" & C_DB_NAME & "_Log.ldf', SIZE = 5MB, MAXSIZE = UNLIMITED, FILEGROWTH = 5MB )"
conn.Execute sql

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM