1

SQL Management Studio で正常に実行される SQL クエリがありますが、VB スクリプトから同じクエリを実行すると、次のエラーで失敗します。

Microsoft OLE DB Provider for SQL Server: キーワード '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
4

1 に答える 1

1

MSDNから:

GO は Transact-SQL ステートメントではありません。これは、sqlcmd ユーティリティと osql ユーティリティ、および SQL Server Management Studio コード エディターによって認識されるコマンドです。

また、同じ記事から:

ODBC または OLE DB API に基づくアプリケーションは、GO コマンドを実行しようとすると、構文エラーを受け取ります。SQL Server ユーティリティがサーバーに GO コマンドを送信することはありません。

GOステートメントを削除して、スクリプトを複数のコマンドに分割してみてください。

于 2013-03-18T17:22:48.990 に答える