解析查询时出错。 [令牌行号]创建表时出现sql错误

时间:2011-05-12 20:07:03

标签: sql sql-server-ce

大家好我试着在 sql compact中创建表格。

以下是查询:

CREATE TABLE [dbo.A] 
(
    Id nvarchar(37) NOT NULL CONSTRAINT Info_PK PRIMARY KEY,
    ImportDate datetime NOT NULL        
);

CREATE TABLE [dbo.B]
(
    Id uniqueidentifier PRIMARY KEY,
        DeviceId smallint,

);

但它在尝试创建表B的行中给出了错误。

4 个答案:

答案 0 :(得分:3)

不要使用dbo。 SQL CE不支持模式。 您可能需要单独执行查询。

这是一个类似的问题和解决方案: http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/d6f1db96-8724-4376-990e-3f6da18c2d08/

答案 1 :(得分:0)

我会删除DeviceId smallint后的逗号

CREATE TABLE [dbo.A]
( Id nvarchar(37) NOT NULL CONSTRAINT Info_PK PRIMARY KEY,             
ImportDate datetime NOT NULL
);

CREATE TABLE [dbo.B] ( Id uniqueidentifier PRIMARY KEY, DeviceId smallint
);

答案 2 :(得分:0)

我搜索了这个,听起来你正在使用SQL CE(为了将来参考,告诉我们你正在使用的SQL的实现总是很好。)

CE中不支持括号[]作为分隔符。尝试从表名中删除它们。

答案 3 :(得分:0)

尽管有多个查询的批处理工作在SQL Server Management Studio上,但它不适用于SqlCeCommand。

您必须在多个查询中拆分您的批处理(您可以使用一个事务来执行所有查询或不执行任何查询)。我建议使用ExecuteNonQuery,因为它不使用游标(这可能会在事务中产生一些错误)。

您可以使用以下示例。

Using connexion As New SqlCeConnection(connexionstring)
            connexion.Open()
            Dim transaction As SqlCeTransaction = connexion.BeginTransaction()
            Try
                Dim batch As String = GetCommandText()
                For Each query In batch.Split(";")
                    If Not String.IsNullOrWhiteSpace(query) Then
                        Dim command As New SqlCeCommand(query, connexion, transaction)
                        command.ExecuteNonQuery()
                    End If
                Next
                transaction.Commit()
            Catch ex As Exception
                transaction.Rollback()
                Throw
            End Try
        End Using