You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SqlPackage.exe发布dacpac时yyyy-MM-dd格式datetime值导入报错解决

sqlpackage发布dacpac报datetime转换越界的解决方法

这个报错的核心原因是本地SQL Server实例的会话默认日期解析顺序和dacpac中存储的yyyy-MM-dd hh:mm:ss格式不匹配:当实例默认语言为简体中文时,默认日期解析顺序会出现错位,横杠分隔的日期字符串可能被解析为“月份值大于12”这类无效值,最终触发转换越界报错。
可按以下任意一种方案调整配置解决:

  • 方案1:给发布命令追加连接参数,临时强制会话日期格式
    直接修改sqlpackage.exe /Action:Publish执行命令,在目标连接串中追加Language=English参数,强制本次发布会话使用ISO标准的ymd日期解析顺序,示例命令:
    sqlpackage.exe /Action:Publish /SourceFile:"你的数据库文件路径.dacpac" /TargetServerName:"本地实例地址,比如localhost" /TargetDatabaseName:要导入的本地库名 /TargetConnectionString:"Data Source=localhost;Initial Catalog=master;Integrated Security=True;Language=English"
    
  • 方案2:修改本地SQL登录的默认语言,永久生效
    如果不想每次执行命令都加参数,可以直接修改本地连接所用账号的默认语言配置:
    1. 用SSMS连接本地SQL实例,先执行查询确认当前配置:
      DBCC USEROPTIONS;
      -- 查看返回结果中的dateformat、language字段值
      
    2. 执行如下语句修改登录账号的默认语言(英语对应的日期解析顺序固定为ymd,和目标格式完全兼容):
      -- 替换方括号内的内容为你本地连接用的登录名,Windows身份验证通常格式为 机器名\Windows用户名
      ALTER LOGIN [你的本地登录账号名] WITH DEFAULT_LANGUAGE = English;
      
    3. 修改完成后重启本地SQL Server服务,后续所有连接默认都会使用正确的日期解析规则。
  • 方案3:修改发布配置文件
    如果你是通过.publish.xml发布配置文件执行dacpac部署,直接在配置文件的TargetConnectionString节点追加语言配置即可:
    <TargetConnectionString>Data Source=.;Initial Catalog=目标本地库;Integrated Security=True;Pooling=False;Language=English</TargetConnectionString>
    

注意:不要直接解压修改dacpac内部的脚本文件,dacpac是结构化打包文件,手动修改很容易损坏文件结构导致发布失败。

内容的提问来源于stack exchange,提问作者AxD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:06:29