【问题标题】:VBS Script to Execute SQL statement?执行 SQL 语句的 VBS 脚本?
【发布时间】:2018-09-21 16:31:12
【问题描述】:

要打开,我从来没有写过vbs脚本。我编写了许多 SQL 脚本、视图、开发的数据库。我在 Access 应用程序中写了很多 VBA。

为此,我只是尝试将 SQL 脚本设置为 VBS 脚本,因此用户不必进入 SSMS 即可运行它。他们只需双击 VBS 脚本,在提示时指定服务器和数据库,快速脚本将为他们运行。

这是我到目前为止所得到的,但我不断收到 Microsoft VBScript 编译错误。最新的是第 3 行 char 17,它位于 Dim 语句中。只是想看看是否有人能判断我是否缺少该脚本的基本内容,即阻止它正确编译或处理。

这是非常短的脚本:

Dim conn 
Set conn = createobject("Adodb.Connection")
Dim sConnString As String
Dim SqlStatement As String

sSourceServer = InputBox ("Enter the name of the SQL Server","Enter SQL Server Name","")
    If Len(sSourceServer) = 0 Then
        MsgBox "No SQL Server was specified.", , "Unable to Continue"
        Exit Sub
    End if

sSourceDB = InputBox ("Enter the name of the Law SQL Database","Enter Law SQL DB Name","")
    If Len(sSourceDB) = 0 Then
        MsgBox "No SQL DB was specified.", , "Unable to Continue"
        Exit Sub
    End if

' Create the connection string.
sConnString = "Provider=SQLOLEDB;Data Source=" & sSourceServer & "; Initial Catalog=" & sSourceDB & "; Integrated Security=SSPI;"

MsgBox sConnString

' Open the connection and execute.
conn.Open sConnString
conn.CommandTimeout = 900

SqlStatement = "UPDATE [tablename] " & _
                                "SET UUID = CASE WHEN CHARINDEX('.',[Filename]) > 1 THEN LEFT(CAST([Filename] AS VARCHAR),CHARINDEX('.',[Filename])-1) ELSE [Filename] END " & _
                                "WHERE [Filename] IS NOT NULL"

conn.Execute(SqlStatement)

conn.Close
Set rs = Nothing
SqlStatement = vbNullString

MsgBox "All Done! Go Check your results!"

如果有人能提供帮助,我将不胜感激。

谢谢

【问题讨论】:

  • 这是真正的 VBS 脚本,还是 Excel 中的 VBA?尝试删除 As String,因为在 VBS 中您不能显式键入任何内容。
  • 感谢您的回复。我是基于 2 个 vbs 脚本编写的。一个是真正的 vbs 脚本。另一个,我在一个论坛上找到的,用户说他们一直在用excel写它,并计划把它变成一个真正的vbs脚本。那是我的问题,似乎。我很高兴我能这么快就让它工作。让我想了解更多关于真正的 vbs 脚本。我已经习惯了 Access 中的 VBA,所以我必须了解两者之间的区别。

标签: sql vbscript compiler-errors adodb


【解决方案1】:

没关系。我一直在排除故障,终于让它工作了。对于那些可能会有所帮助的人,与 VBA 不同,不将变量声明为类型更容易。只需将它们调暗并继续前进。见下文:

Dim conn 
Set conn = createobject("Adodb.Connection")
Dim sConnString
Dim SqlStatement

StartScript

Sub StartScript()

sSourceServer = InputBox ("Enter the name of the SQL Server","Enter SQL Server Name","")
    If Len(sSourceServer) = 0 Then
        MsgBox "No SQL Server was specified.", , "Unable to Continue"
        Exit Sub
    End if

sSourceDB = InputBox ("Enter the name of the Law SQL Database","Enter Law SQL DB Name","")
    If Len(sSourceDB) = 0 Then
        MsgBox "No SQL DB was specified.", , "Unable to Continue"
        Exit Sub
    End if

' Create the connection string.
sConnString = "Provider=SQLOLEDB;Data Source=" & sSourceServer & "; Initial Catalog=" & sSourceDB & "; Integrated Security=SSPI;"

' Open the connection and execute.
conn.Open sConnString
conn.CommandTimeout = 900

SqlStatement = "UPDATE [tablename] " & _
                                "SET UUID = CASE WHEN CHARINDEX('.',[Filename]) > 1 THEN LEFT(CAST([Filename] AS VARCHAR),CHARINDEX('.',[Filename])-1) ELSE [Filename] END " & _
                                "WHERE [Filename] IS NOT NULL"

conn.Execute(SqlStatement)

conn.Close
Set rs = Nothing
SqlStatement = vbNullString

End Sub

MsgBox "All Done! Go Check your results!"

请记住,对于那些希望将其用作脚本基础的人 - 我没有进行任何检查,因此如果您不知道自己的数据,那么运行这是一件危险的事情。

了解您的数据,备份您的数据,如果可以,添加一些检查,以确保在运行之前检查并重新检查任何不是 select 语句的内容。

【讨论】:

  • 它不仅“更简单”,而且根本不受支持,所有变量在 VBScript 中都是无类型的,这就是您首先遇到编译错误的原因。
  • 感谢您的解释!我刚刚完成了 2 个我拥有的示例,并拍了一张照片,看看我是否可以让一个工作。我很惊喜我能够做到。现在我想了解更多关于专门创建 vbs 脚本的信息,因为我确信我可以找到更多用途。
猜你喜欢
  • 1970-01-01
  • 2020-05-27
  • 2018-01-19
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
相关资源
最近更新 更多