执行SQL代码

时间:2015-07-11 09:18:39

标签: c# sql sql-server

我有创建数据库和表的脚本(大约50个表)。当我将脚本粘贴到SQL Management studio时它运行正常,但是当我尝试从我的应用程序运行时,我得到一个SQL异常。

这是我的代码:

string enterRecordsScript = "my sql script";
SqlCommand enterRecords = new SqlCommand(enterRecordsScript, connection);
enterRecords.ExecuteNonQuery();

以下是例外:

A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
Additional information: Incorrect syntax near 'GO'.
'CREATE VIEW' must be the first statement in a query batch.
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
Incorrect syntax near 'GO'.

这是脚本:

CREATE DATABASE TEST3
GO
USE Test3;

CREATE TABLE [SAShoppingInvoice]
(
    [Guid] uniqueidentifier PRIMARY KEY NOT NULL ROWGUIDCOL,
    [Number] nvarchar(50),
    [DateOfShopping] datetime,
    [SubTotal] decimal(18,2) DEFAULT 0,
    [PSubTotal] decimal(18,2) DEFAULT 0,
    [Freight] decimal(18,2) DEFAULT 0,
    [Total] decimal(18,2) DEFAULT 0,
    [ATotal] decimal(18,2) DEFAULT 0,
    [PriceLevel] nvarchar(20),
    [SummaryTotal] decimal(18,2) DEFAULT 0,
);


CREATE TABLE [SAShoppingInvoiceDetail]
(
    [Guid] uniqueidentifier PRIMARY KEY NOT NULL ROWGUIDCOL,
    [Number] nvarchar(50),
    [UnitPrice] decimal(18,2) DEFAULT 0,
    [Quantity] decimal(18,2) DEFAULT 0,
    [Description] nvarchar(100),
);



ALTER TABLE [SAShoppingInvoiceDetail]
ADD ShoppingInvoiceGuid uniqueidentifier
CONSTRAINT FK_SAShoppingInvoice_ShoppingInvoice_To_SAShoppingInvoiceDetail_ShoppingInvoice
FOREIGN KEY (ShoppingInvoiceGuid) 
REFERENCES [SAShoppingInvoice](Guid);

GO
CREATE VIEW SAShoppingInvoice_SummaryTotal WITH SCHEMABINDING AS SELECT ShoppingInvoiceGuid,  SUM(ISNULL(Quantity,0)*ISNULL(UnitPrice,0)) as SummaryTotal, COUNT_BIG(*) as CountBig
FROM dbo.SAShoppingInvoiceDetail Group By ShoppingInvoiceGuid;
GO
CREATE UNIQUE CLUSTERED INDEX idx_SAShoppingInvoiceSummaryTotal ON SAShoppingInvoice_SummaryTotal(ShoppingInvoiceGuid);

为什么从我的应用程序运行脚本会出现问题?

1 个答案:

答案 0 :(得分:4)

GO无效的SQL。某些特定工具(例如SSMS)将其用于将大型文本文件拆分为多个单独的命令。在您自己的计划中,这将成为您的责任。

如果您有文本文件

a
GO
b
GO
c
GO

然后,如果要使用SqlCommand个对象执行此操作,则需要三个命令,一个包含a,一个包含b,另一个包含c。这三者中没有一个包含GO