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

sqlcmd导入数据库时忽略脚本变量的问题求助

解决sqlcmd导入时$(xxx)文本被识别为脚本变量的问题

问题场景

  • 场景一:执行以下INSERT语句时,报错'mid' scripting variable not defined
    INSERT INTO [users] ([id],[email],[title],[desc]) VALUES (1096,'sda@asfsdf.com',N'Shami Doc', N'This is profile of Shami who sends $(mid) message');
    
    原因:sqlcmd把$(mid)当成了未定义的脚本变量。
  • 场景二:执行以下INSERT语句时出现语法错误
    INSERT INTO [users] ([id],[email],[title],[desc]) VALUES (1091,'das@dsa.com',N'Raj Doc', N'This is profile of Raj who sends $(m message');
    
    原因:sqlcmd认为$(m是不完整的变量引用,导致语法解析失败。

解决办法

方法1:修改SQL语句转义$(推荐)

sqlcmd里要把$作为普通文本存储,直接把单个$改成$$就行,这样不会触发变量识别:

  • 场景一修正后语句:
    INSERT INTO [users] ([id],[email],[title],[desc]) VALUES (1096,'sda@asfsdf.com',N'Shami Doc', N'This is profile of Shami who sends $$(mid) message');
    
  • 场景二修正后语句:
    INSERT INTO [users] ([id],[email],[title],[desc]) VALUES (1091,'das@dsa.com',N'Raj Doc', N'This is profile of Raj who sends $$(m message');
    

方法2:执行sqlcmd时修改变量分隔符

如果不想改SQL文件,执行sqlcmd时用-v参数重新指定变量分隔符,比如改成@@,这样sqlcmd只会认@@xxx为变量,忽略$(xxx):

sqlcmd -S 你的服务器地址 -d 目标数据库名 -i 你的SQL脚本文件.sql -v VARSEP=@@

方法3:完全禁用sqlcmd变量替换

如果你的脚本里没有需要正常替换的变量,可以用-x参数彻底关闭变量替换功能,这样所有$(xxx)都会被当成普通文本:

sqlcmd -S 你的服务器地址 -d 目标数据库名 -i 你的SQL脚本文件.sql -x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:50:11