在创建一个sqlcmd在循环中调用不同变量的 bash 脚本时,注意到它似乎将在第一次调用时应在循环中更新的循环变量设置为常量(可以看出这很可能是罪魁祸首)continueing 以及循环的后面和后面的部分,直到到达该sqlcmd部分)。IE。如果我们用 循环遍历 MSSQL Server 表名的列表(长度为 L)sqlcmd,则循环将执行,而不是 L,而是仅使用列表中的 第一个条目进行循环指令的无限迭代。
一个最小的例子如下:
#!/bin/bash
tables_list=$1
while read -r line
do
tablecols="$line"
IFS=',' read -a arr_tablecols <<< "$tablecols"
mssql_tablename=${arr_tablecols[0]}
echo -e "\n\n\n##### Processing: $mssql_tablename #####\n"
TO_SERVER_ODBCDSN="-D -S <ODBC DSN name for mssql host>"
TO_SERVER_IP="-S <my mssql host IP>"
DB="ClarityETL_test"
TABLE="$mssql_tablename"
USER=<my mssql username>
PASSWORD=<my mssql login password>
#uncomment to see that sqlcmd does in fact appear to be the problem …Run Code Online (Sandbox Code Playgroud) 我在 azure devops 的发布管道中使用 sql DACPAC 类型的部署。但出现以下错误。我对 SQL 不了解。有什么建议吗?
Publishing to database 'database_name' on server 'Server_name'.
Initializing deployment (Start)
*** The column [dbo].[xxxx].[yyyy] is being dropped, data loss could
occur.
Initializing deployment (Complete)
Analyzing deployment plan (Start)
*** If this deployment is executed, changes to [dbo].[xxx2] might
introduce run-time errors in [dbo].[yyyy2].
Analyzing deployment plan (Complete)
Updating database (Start)
An error occurred while the batch was being executed.
Updating database (Failed)
Run Code Online (Sandbox Code Playgroud) 我遇到了有关 sqlcmd 的问题,
计算机中有SSMS 2017,我可以在SSMS 2017中使用SQLCMD MODE,但无法在命令提示符中调用sqlcmd,
“‘sqlcmd.exe’未被识别为内部或外部命令、可操作程序或批处理文件”
我在整个计算机中找不到SQLCMD.EXE。
既然我可以在SSMS中使用SQLCMD MODE,这是否意味着计算机中必须有sqlcmd.exe?
非常感谢,
我们遇到了Powershell和SQLCMD的问题,当-v参数变量中存在sapces时,powershell将不会运行该命令.
例如
sqlcmd ... -v VAR="Some space"
Run Code Online (Sandbox Code Playgroud)
有没有人以前经历过这个或知道如何解决这个问题?
谢谢,
乙
当遇到错误时,我似乎无法让NAnt中止我的构建.这是许多sqlcmd.exe执行中的一个:
<property name="test" value=""/>
<exec program="sqlcmd.exe" resultproperty="test" failonerror="true"
basedir="${sqlcmd.dir}" commandline="${commandline.script}" verbose="true">
<arg value="${filename}" />
<arg value="-v databaseName="${Database.Name}"" />
</exec>
<echo message="Result: ${test}"/>
Run Code Online (Sandbox Code Playgroud)
当我执行此步骤时,由于(在这种情况下)缺少逗号,我最终会出现错误.这是输出:
[exec] Starting 'C:\...\sqlcmd.exe (-E -S (local) -e -d "Core"
-i "C:\...\Associations.sql" -v databaseName="Core")'
in 'C:\...\Scripts'
[exec] <snip - lots of SQL>
[exec] Msg 102, Level 15, State 1, Server <snip>, Line 7
[exec] Incorrect syntax near 'CreatedDate'.
[exec] Msg 319, Level 15, State 1, Server <snip>, Line 11
[exec] Incorrect syntax near the keyword 'with'. …Run Code Online (Sandbox Code Playgroud) 在我的Java程序中,我试图使用sqlcmdvia 执行一堆SQL脚本getRuntime.exec().
早些时候,我一直在用osql这种方式 -
osql -n -S SERVER -U sa -P PASSWORD -q "SET NOCOUNT ON" -i "INPUTSCRIPT.sql"
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下sqlcmd,-i和-q交换机是互斥的.我该怎么办sqlcmd?
注意:
我宁愿不修改SQL脚本以包含SET NOCOUNT ON在每个文件中.
还有的已经是一个非常类似的问题在这里.该解决方案讨论了设置环境变量 这有可能使用Java吗?
我正在使用sqlcmd使用-o运算符将查询写入文件.我想将多个文章附加到同一个文件,但是使用>>不会生成unicode文件并且会产生特殊字符的问题...
运算符>>正确附加文件,但我需要-o -u来获得正确的字符.
有人有解决方案吗?
我必须运行n查询SQL以更新更多数据库.我创建了一个批处理文件来帮助我完成此活动,但查询不是按名称排序执行的.
我使用这个批处理命令:
for %%I in (.\*.sql) DO sqlcmd -S .\istance -U username -P password -d dbname -i %%I -o .\%%I.log
Run Code Online (Sandbox Code Playgroud)
如何运行按名称排序的所有查询?
感谢您的回答.
注意:我使用的是Windows 7.
我正在尝试从Powershell中为Windows SQL Server 2008 R2运行sql查询。看起来该代码未能通过SQL Server身份验证凭据才能正确运行sqlcmd。我直接从powershell运行第一部分,而不是作为脚本运行。
Set-Location SQLServer:\SQL\Server\
Invoke-sqlcmd "SELECT DB_NAME() AS hist;" -username "username" -password "p@ss"
Run Code Online (Sandbox Code Playgroud)
我收到错误消息,Login failed for user 'username'.代码格式的理想最终结果看起来像这样。相同的结果错误。
$path = "sqldbdump.csv"
$server = "serveronlocalhost"
$db = "hist"
$Query = @"
SELECT * From alarms;
"@
Invoke-Sqlcmd -ServerInstance $server -Database $db -Username $username -Password $pw -Query $Query | Export-CSV $path
Run Code Online (Sandbox Code Playgroud)
我也尝试convert-tosecurestring -asplaintext没有成功。
$pw = convertto-securestring -AsPlainText -Force -String "p@ss"
Run Code Online (Sandbox Code Playgroud) 我正在安排Windows中的任务每晚连接到一个场外SQL Server以运行查询并将结果保存为.CSV文件.我可以使用SSMS连接到SQL Server而没有任何问题.我可以在命令提示符下使用SQLCMD手动连接到SQL Server,完全没有问题.我的问题是我不能在批处理文件中使用SQLCMD.我正在使用的语法是......
sqlcmd -S ServerName\InstanceName -d DatabaseName -U UserName -P Password
如果我手动将其输入我的命令窗口,它就像一个冠军.
如果我尝试使用批处理文件进行连接,则会收到错误消息"用户'UserName'的消息为"Msg 18456,状态1,服务器ServerName\InstanceName,行1登录失败".
我也尝试右键单击批处理文件并以管理员身份运行但没有成功.预先感谢您的帮助.
特拉维斯
UPDATE
我刚刚发现,如果从批处理文件中取出-P Password参数,系统将提示您输入密码.输入密码后,我已成功登录.从批处理文件将密码传递给SQL服务器是否有限制?由于这是一个不在我们网络上的异地服务器,我无法使用Windows身份验证.
sqlcmd ×10
sql-server ×5
batch-file ×3
powershell ×2
sql ×2
append ×1
azure-devops ×1
bash ×1
dacpac ×1
file ×1
for-loop ×1
java ×1
nant ×1
ssms ×1
ssms-2017 ×1
unicode ×1