在SQLCMD for Linux中使用变量

GPX*_*GPX 10 linux sql-server sqlcmd

我正在使用Korn shell在Linux机箱(Red Hat Enterprise Server 5.3 tikanga)上运行适用于Linux的Microsoft SQLCMD工具(CTP 11.0.1720.0).该工具已正确配置,除了使用脚本变量外,在所有情况下均可使用.

我有一个SQL脚本,看起来像这样.

SELECT COLUMN1 FROM TABLE WHERE COLUMN2 = '$(param1)';
Run Code Online (Sandbox Code Playgroud)

而且我正在运行这样的sqlcmd命令.

sqlcmd -S server -d database -U user -P pass -i input.sql -v param1="DUMMYVALUE"
Run Code Online (Sandbox Code Playgroud)

当我执行上面的命令时,我收到以下错误.

Sqlcmd: 'param1=DUMMYVALUE': Invalid argument. Enter '-?' for help.

帮助列出以下语法.

[-v var = "value"...]

我在这里错过了什么吗?

Ana*_*and 15

您不需要将变量传递给sqlcmd.它会从您的shell变量中自动选择:例如

export param1 = DUMMYVALUE

sqlcmd -S $host -U $user -P $pwd -d $db -i input.sql


Ed *_*per 8

在RTP版本(11.0.1790.0)中,-v执行时,该开关不会出现在参数列表中sqlcmd -?。显然,该工具的Linux版本不支持此选项。
据我所知,从环境变量导入参数值也不起作用。

如果需要解决方法,一种方法是将一个或多个:setvar语句与包含要运行到新文件中的命令的文本文件连接起来,然后执行新文件。根据您的示例:

echo :setvar param1 DUMMYVALUE > param_input.sql
cat input.sql >> param_input.sql
sqlcmd -S server -d database -U user -P pass -i param_input.sql 
Run Code Online (Sandbox Code Playgroud)