【问题标题】:Valid SQL query fails when executed from VB Script从 VB 脚本执行时,有效的 SQL 查询失败
【发布时间】:2013-03-18 17:01:30
【问题描述】:

我有在 SQL 管理工作室中成功运行的 SQL 查询,但是当我从 VB 脚本运行相同的查询时,它失败并出现错误:

用于 SQL Server 的 Microsoft OLE DB 提供程序:关键字“ALTER”附近的语法不正确。

我的 SQL 查询是:

SET XACT_ABORT ON;
BEGIN TRANSACTION VersionBuild
BEGIN TRANSACTION
GO
CREATE TABLE dbo.TimeTemplate
    (
    id int NOT NULL IDENTITY (1, 1),
    startTime datetime NOT NULL,
    endTime datetime NOT NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.TimeTemplate ADD CONSTRAINT
    PK_TimeTemplate PRIMARY KEY CLUSTERED 
    (
    id
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT

INSERT INTO [dbo].[TimeTemplate] ([startTime],[endTime])
VALUES ('2013-03-15 00:00:00.000','2013-03-15 23:59:00.000')

INSERT INTO [dbo].[Form] ([name] , [description], [dateCreated], [fileName])
VALUES ('TimeTemplates.aspx' , '' , getdate(), 'TimeTemplates.aspx')

;

If @@Error <> 0 BEGIN
ROLLBACK TRANSACTION VersionBuild
END ELSE 
BEGIN
UPDATE Version SET version = 74;
COMMIT TRANSACTION VersionBuild
END

【问题讨论】:

    标签: sql vbscript oledb


    【解决方案1】:

    来自MSDN:

    GO 不是 Transact-SQL 语句;这是一个被认可的命令 sqlcmd 和 osql 实用程序以及 SQL Server Management Studio 代码 编辑。

    也来自同一篇文章:

    基于 ODBC 或 OLE DB API 的应用程序收到语法错误 如果他们尝试执行 GO 命令。 SQL Server 实用程序从不 向服务器发送 GO 命令。

    尝试删除您的 GO 语句并将脚本分解为多个命令。

    【讨论】:

    • 另外,如果您打算保留错误检查,您可能需要将错误作为查询结果返回,并在 vbscript 中处理实际的if 语句。我认为您不能在 vbs 中使用这样的 if 语句。另一种选择是将整个事情变成它自己的存储过程,然后执行一个从 vbscript 调用 sp 的命令。
    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多