“;”附近的语法不正确 - 适用于SQL Server,而不是Servicestack.ORMLite

时间:2014-10-15 00:50:48

标签: sql sql-server ormlite-servicestack

我正在通过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执行时。命令,我收到以下错误:

  

关键字'附近有'的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号结束前一个语句。

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

  

&#39 ;;'

附近的语法不正确

执行其他所有'选择'声明工作正常,但如果它以“'或其他任何东西。但这似乎不是Servicestack.ORMLite错误 - 两者都是System.Data.SqlClient.SqlExceptions。如果我将在debug中生成的生成代码复制到SQL Server Management Studio中,它可以正常工作,但是通过ORMLite执行相同的代码并且它会失败。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

Servicestack.ORMLite不喜欢CTE。您应该查看使用自定义SQL API,请参阅here

这样的事情:

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);