Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Variables SQLCMD的用法类似于“%@%”_Variables_Batch File_Escaping_Notepad++_Sqlcmd - Fatal编程技术网

Variables SQLCMD的用法类似于“%@%”

Variables SQLCMD的用法类似于“%@%”,variables,batch-file,escaping,notepad++,sqlcmd,Variables,Batch File,Escaping,Notepad++,Sqlcmd,我正在尝试使用SQLCMD.EXE运行查询,但遇到类似部分的问题 WHERE email LIKE '%%@%%' 我认为这是cmd提示符而不是SQLCMD.EXE的错误,因为我得到了错误: Syntax error "@%'" 我通过Notepad++NppExec运行此命令,指向bat文件,如下所示: H:\scripts\SQL.bat "$(CURRENT_WORD)" SQLCMD.EXE -U user -P %pass% -S %server% -Q %sql% -d %ta

我正在尝试使用SQLCMD.EXE运行查询,但遇到类似部分的问题

WHERE email LIKE '%%@%%'
我认为这是cmd提示符而不是SQLCMD.EXE的错误,因为我得到了错误:

Syntax error "@%'"
我通过Notepad++NppExec运行此命令,指向bat文件,如下所示:

H:\scripts\SQL.bat "$(CURRENT_WORD)"
SQLCMD.EXE -U user -P %pass% -S %server% -Q %sql% -d %table%
这会导致查询在被SQLCMD.EXE调用使用之前被包装在双引号中。SQLCMD.EXE调用然后在bat文件中运行,如下所示:

H:\scripts\SQL.bat "$(CURRENT_WORD)"
SQLCMD.EXE -U user -P %pass% -S %server% -Q %sql% -d %table%
除了“%@%%”部分之外,它在我使用的任何查询上都能完美地工作

更新

我还做了一些测试,我想我已经把它缩小到了%和@的问题

因此,像这样的查询可以很好地工作:

从名称类似“test”的表中选择名称 从名称类似“test%”的表中选择名称 从表中选择名称,其中的名称类似于“%”%test“ 但这些都会导致错误:

从名称类似“%test”的表中选择名称 从名为“%test%”的表中选择名称 这很好,因为我可以将查询中的%增加一倍,但我尝试了%%@%和%%@%%,但它们会抛出错误。语法错误@'或语法错误@%'

另外,使用这些变量的原因是我包含了一些逻辑,这样它就可以检测表名并为不同的服务器和数据库运行

这是bat文件

set sql=%1
iff %@index[%sql%,sur_] GT -1 THEN
    SET SERVER=server1
    SET table=tablename
    SET pass=password
else
    SET SERVER=server2
    SET table=tablename
    SET pass=password
endiff
SQLCMD.EXE -U usr -P %pass% -S %server% -Q %sql% -d %table%

之所以出现这种奇怪的语法,是因为命令是通过TCC/LE运行的,我不太确定将%s加倍的原因是什么,但看起来您的目的是在电子邮件列中查找包含@的值。如果是这样,您可以尝试将该子句改写为:

WHERE CHARINDEX('@', email) > 0
如果是@符号让事情变得一团糟,请改用CHAR64


使用sqlcmd运行查询时,我发现%symbol将被删除。假设您的查询是:

SELECT name FROM table WHERE name LIKE 'test%'
sqlcmd将把您的查询读取为

SELECT name FROM table WHERE name LIKE 'test'
因此sqlcmd不会过滤您的结果。请使用%%进行查询

SELECT name FROM table WHERE name LIKE 'test%%'
你会得到结果的

SELECT name FROM table WHERE name LIKE 'test%'

我已经在SQLServer2005&2008上测试了它,它将进入一个批处理文件,因此%@%将转换为一个名为@的变量或一些奇怪的东西。我不太清楚那里发生了什么,这就是为什么我问这个问题:@DavidStarkey我已经更新了我的答案。如果是@符号让事情变得一团糟,那么在它的位置使用CHAR64。否则,第一个建议行得通吗?这行得通,但我的最终目标是能够通过使用SQLCMD.exe和批处理命令的组合,通过我的文本编辑器运行SQL命令。我希望我的查询尽可能接近正常的SQL命令。此外,我不确定如何将其转换为更复杂的电子邮件内容,例如“%test%@%”之类的电子邮件。您能否将问题归结为发生错误的最基本元素,消除不影响根本问题的其他元素?例如,如果我有test.bat,它是SQLCMD.EXE-S。\SQLEXPRESS-E-Q%1,并且我像test.bat一样运行它,那么选择“它工作了”作为结果where'ihave@symbol“与“%@%”类似,它按预期工作。您的批处理文件或执行方法是什么导致此操作失败的?我猜错误出现在调用的-Q%sql%部分,但我还有%@索引[%sql],sur\ux]。这有助于确定需要将查询发送到哪个服务器。在一台服务器上,表名通常以sur_u作为前缀。是否可以发布批处理文件的内容?内容已发布。