Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取.BAT文件或SQLCMD以提示用户输入_Sql_Sql Server 2008_Batch File_Sqlcmd - Fatal编程技术网

获取.BAT文件或SQLCMD以提示用户输入

获取.BAT文件或SQLCMD以提示用户输入,sql,sql-server-2008,batch-file,sqlcmd,Sql,Sql Server 2008,Batch File,Sqlcmd,我正在尝试运行以下查询 sqlcmd -STEMP7 -E -devolive_base -w256 -QEXIT("DECLARE @r int EXEC @r = usp_AddToObservationtbl $,$,$ SELECT @r") 我正在尝试获取BAT文件,以询问用户3个变量。。。。有人能帮我吗?您可以使用set/p获取变量: set /p var1=Enter variable 1 set /p var2=Enter variable 2 set /p var3=

我正在尝试运行以下查询

sqlcmd -STEMP7 -E -devolive_base -w256
    -QEXIT("DECLARE @r int EXEC @r = usp_AddToObservationtbl $,$,$ SELECT @r")

我正在尝试获取BAT文件,以询问用户3个变量。。。。有人能帮我吗?

您可以使用
set/p
获取变量:

set /p var1=Enter variable 1
set /p var2=Enter variable 2
set /p var3=Enter variable 3
…然后在命令行中使用它们:

sqlcmd -STEMP7 -E -devolive_base -w256 -QEXIT("DECLARE @r int EXEC @r = usp_AddToObservationtbl %var1%,%var2%,%var3% SELECT @r")

请记住,这仍然会使您面临SQL注入攻击或有人输入破坏性内容。

感谢大家的评论

问题似乎是我的SQLCMD语法不正确,但它不会引发错误,如果我用osql替换它,变量替换确实有效。所以这个很好用

set /p var1= Enter Userid
set /p var2= Enter Casino Name  
set /p var3= Enter Screename 

osql -STEMP7 -E -devolive_base -w256 -QEXIT("DECLARE @r int EXEC @r = usp_AddToObservationtbl %var1%,%var2%,%var3% SELECT @r") -b -oc:\bat\observation.log
exit errorlevel

下面是一个简单的例子,解决了基本问题,删除了实际查询的细节

我删除了一个更改Windows提示符的命令和一个关闭echo的命令,因为它们只是用来美化输出,而不是解决方案的一部分。我还在数据输入提示符中使用了一个下划线,在这里通常会有一个空格,以便您可以看到它。我在bat文件的末尾留下了一个
暂停
,这只是查看输出所必需的,以防您想自己尝试一下

测试蝙蝠 test.sql 当您运行批处理文件时,这就是您得到的结果

实际上,批处理变量和SQL变量可能使用相同的名称。它们在上面是不同的,以说明什么是什么

如果需要这样做,可能需要多个变量。您可以通过重复
sqlcmd
-v sqlvariablename=%batchvariablename%
部分来处理此问题,例如

-v v1=%v1% -v v2=%v2%
测试蝙蝠 test.sql 请注意,在第二个示例中添加了引号(用于字符串数据),第一个示例中没有出现引号(仅用于数字数据)

您可能希望为item字段运行带有
巧克力盒的示例,并检查其行为


这似乎不起作用,脚本退出时没有插入任何行,我没有收到任何错误文件either@chris-如果手动输入变量,是否有效?还请记住,如果它们是字符串,则需要添加单引号来包装它们。如果我用$symbol替换值,则可以使用。变量设置不起作用。我假设这是因为无法将值传递到SQLcmdprogram@Chris-
sqlcmd
有一个
-v
参数,可以用来将参数传递给被调用的脚本。
SELECT $(sqlvariable) AS [result];
-v v1=%v1% -v v2=%v2%
set /p item=Item : 
set /p cost=Cost : 
sqlcmd -v item="%item%" -v cost=%cost% -i test.sql
SELECT '$(item)' AS [item], $(cost) AS [cost];