SQL

';'附近的语法不正确 -在SQL Server中工作,而不是在Servicestack.ORMLite中工作

发布于 2021-05-20 11:10:37

我正在通过Servicestack.ORMLite执行一条SQL语句。该语句具有以下格式:

with rowdata as (
select t1.v1, t1.v2 datakey, t2.v1 datavalue from t1
left join t2 on t2.rowid = t1.rowid      
)
select * from rowdata
PIVOT
(
    SUM(datavalue)
    FOR datakey IN ([1],[2],[3],[4],[5])
)AS PivtTable

这可以在SQL Server和Oracle中正确执行(有一些小的更改)。但是,当使用“
db.Select(sql)”命令通过Servicestack.ORMLite执行时,出现以下错误:

关键字“ with”附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止。

以分号终止只会返回以下错误:

’;’附近的语法不正确

执行所有其他“选择”语句都可以,但是如果它以“ with”或其他任何形式开头,则无法正常工作。但这似乎不是Servicestack.ORMLite错误-
两者都是System.Data.SqlClient.SqlExceptions。如果我将在调试中生成的生成的代码复制到SQL Server
Management Studio中,则可以正常工作,但是通过ORMLite执行相同的代码却失败了。

有任何想法吗?

关注者
0
被浏览
88
1 个回答
  • 面试哥
    面试哥 2021-05-20
    为面试而生,有面试问题,就找面试哥。

    Servicestack.ORMLite不喜欢CTE。您应该查看使用自定义SQL
    API的方法,请参见此处

    像这样的东西:

    var sql = @"with rowdata as (
    select t1.v1, t1.v2 datakey, t2.v1 datavalue from t1
    left join t2 on t2.rowid = t1.rowid      
    )
    select * from rowdata
    PIVOT
    (
        SUM(datavalue)
        FOR datakey IN ([1],[2],[3],[4],[5])
    )AS PivtTable"
    
    List<MyType> results = db.SqlList<MyType>(sql);
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看