一尘不染

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

sql

我正在通过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执行相同的代码却失败了。

有任何想法吗?


阅读 138

收藏
2021-05-16

共1个答案

一尘不染

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);
2021-05-16