【发布时间】:2025-12-06 01:45:01
【问题描述】:
我已经为此苦苦挣扎了一段时间。我正在尝试调用一个 sql 脚本并使用 sqlcmd 将两个变量传递给它。我在 PowerShell 中完成所有这些工作。
这是我得到的:
$time = '12:00 AM'
$date = '06/20/2014'
$result = sqlcmd -U username -P password -i "c:\path\to\script.sql" -v date=$date -v time=$time
此操作失败并显示以下错误消息:
sqlcmd : Sqlcmd: 'time=12:00 AM': Invalid argument. Enter -? for help.
经过一些实验,我发现问题在于 $time 中的冒号和空格。如果我删除冒号和空格$time = '1200AM',命令执行没有任何错误。
不幸的是,我正在执行的脚本需要精确的格式“12:00 AM”。
我尝试过但不起作用的方法:
$time="12\:00\ AM"
$time="12\\:00\\ AM"
$time="12"+":00"+" AM"
$time="12"+":00"
$time="12"+":"+"00"
这些都以类似的Invalid argument 失败响应。最后几次尝试是来自this similar post 的解决方案。它们不起作用。
我也尝试将字符串值直接放在 sqlcmd 调用中,如下所示:
$result = sqlcmd -U username -P password -i "c:\path\to\script.sql" -v date=$date -v time="12\:00\ AM".
没有骰子,无论如何,我需要从其他地方读取时间,所以我需要 $time 变量。
【问题讨论】:
-
不确定这是否是您正在寻找的答案:*.com/questions/17041145/…。认为您需要将百分比翻倍。其他字符有不同的escapes。
-
@Matt 嘿,我很感激你的努力,但这似乎并不相关。冒号和空格不需要转义,至少对于普通的批处理文件是这样。 Here 是需要转义的字符列表。
-
好的...我们链接了同一篇文章。是的,似乎没有提到冒号。我的错。
-v "date=""$date"""怎么样?这应该允许在传递给 sqlcmd 时有时间加上引号?
标签: powershell sqlcmd