文章内容

2017/6/4 15:19:48,作 者: 黄兵

'OFFSET' 附近有语法错误

在切换到sqlserver 2008r2数据库版本后出现 {"'OFFSET' 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效。"} 的报错。在了解sqlserver 2008r2并不支持fetch这种语法后大概就猜到ef生成了错误版本的sql脚本。

项目中使用的是基于edmx文件的dbfirst方式,右键edmx文件选择“打开方式”菜单。使用xml编辑器打开edmx文件,搜索“ProviderManifestToken”,该属性的值是2012,正好对应我们之前使用的sqlserver2014的数据库(等会会解释这里为啥不是2014),然后将2012修改为2008。保存关闭文件,然后双击打开文件,重新编译项目,调试,正常运行。

最后附上ef6源代码中ProviderManifestToken的合法值:

internal class SqlProviderManifest : DbXmlEnabledProviderManifest
    {
        internal const string TokenSql8 = "2000";
        internal const string TokenSql9 = "2005";
        internal const string TokenSql10 = "2008";
        internal const string TokenSql11 = "2012";
        internal const string TokenAzure11 = "2012.Azure";

这里就能看出出ef6的时候可能2014还没发布,所以源代码里最高版本就是2012。

原创文章,转载请注明: 转载自xdlysk的博客

本文链接地址: dbfirst切换数据库版本后由于ProviderManifestToken所引发的脚本错误[http://www.xdlysk.com/article/58058a4b479f7b540f9f5ef9]

分享到:

发表评论

评论列表