我有创建数据库和表的脚本(大约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);
为什么从我的应用程序运行脚本会出现问题?
答案 0 :(得分:4)
GO
无效的SQL。某些特定工具(例如SSMS)将其用于将大型文本文件拆分为多个单独的命令。在您自己的计划中,这将成为您的责任。
如果您有文本文件
a GO b GO c GO
然后,如果要使用SqlCommand
个对象执行此操作,则需要三个命令,一个包含a
,一个包含b
,另一个包含c
。这三者中没有一个包含GO
。