我在T-SQl脚本中使用sqlcmd将文本文件写入网络位置。但是,由于对网络文件夹的访问权限,SQLCMD无法写入该位置。SP正在我的用户帐户下运行,该用户帐户可以访问网络文件夹。
如果未在TSQL脚本中指定-U和-P选项,请您能帮我在哪个帐户下运行sqlcmd?
sqlcmd中显示所有设置选项及其相关设置的命令是什么?
例如,如何显示nocount的当前值?
set
set nocount
set nocount ?
Run Code Online (Sandbox Code Playgroud) 我有一个比较尴尬的问题:
现在有两个星期,每当我使用SQL脚本更新/创建存储过程后,运行这些存储过程时,它们都会因上述错误而失败。
其他有关此问题的帖子对我的情况没有帮助。
以下是一些参数,有助于排除在我的情况下不适用的常见解决方案:
我的存储过程脚本可在笔记本电脑(SQL Server 2012,Windows Server 2008 R2)上完美运行。
我的存储过程脚本可以在任何其他计算机(安装了SQL Server 2012的构建计算机;安装了SQL Server 2005的TEST服务器和安装了SQL Server 2005的PROD服务器)上正确创建存储过程。但是,存储过程将不会在我的任何其他机器上运行。
我正在机器上使用生产SQL Server(SQL Server 2005)的数据库备份(就像这里的任何其他机器一样)。
即使是最基本的存储过程也会失败(例如DELETE myTable WHERE ID = @delID)。
在我检查过的每个SQL Server安装中OFF,在服务器级别和数据库级别上,带引号的标识符都设置为(!)。那么,为什么我的存储过程突然需要将此选项设置为ON?
我SQLCMD用来运行脚本。这使我可以选择在USE语句中动态设置服务器实例的数据库名称。
我的脚本只包含一个USE语句,紧接在ALTER PROCEDURE; 之后。或者IF EXISTS (...) DROP PROCEDURE ... GO; CREATE PROCEDURE ...
这一切已经工作了好几年,但是自两个星期前以来,突然用我的脚本创建的存储过程突然失败了。
我知道我可以在脚本中手动设置QUOTED_IDENTIFIER为ON-但我不想这样做。这里有问题。我想知道那是什么问题。
这里发生了什么事?
在 SSMS 中,我可以在一个批次中创建一个全局临时变量并在另一个批次中使用它。像这样:
CREATE TABLE ##temp (col1 INT)
GO
DROP TABLE ##temp
GO
Run Code Online (Sandbox Code Playgroud)
使用 SQLCMD,我在一次调用中创建了一个全局临时表,而在第二次调用中它不存在。
sqlcmd -S localhost -d tempdb -E -Q "create table ##temp (col1 int)"
sqlcmd -S localhost -d tempdb -E -Q "drop table ##temp"
Msg 3701, Level 11, State 5, Server VATLLXT7LGBARE2, Line 1
Cannot drop the table '##temp', because it does not exist or you do not have permission.
Run Code Online (Sandbox Code Playgroud)
在服务器重置之前,全局临时表不应该保留吗?
我正在尝试使用“Hello World”作为概念证明,sqlcmd但我很难:
命令:
sqlcmd 'cmd.exe'
Run Code Online (Sandbox Code Playgroud)
错误:
找不到存储过程“sqlcmd”。
我在 BCP 上遇到了类似的问题:
bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable"
Run Code Online (Sandbox Code Playgroud)
找不到存储过程“bcp”。
这是一台 SQL Server 2014 机器。这是怎么回事,我该如何解决?
我有一个设计为由sqlcmd执行的SQL脚本,以及一个使用正确参数执行sqlcmd的Command脚本.
我想将Command脚本转换为使用Invoke-Sqlcmd而不是sqlcmd 的PowerShell脚本.
SQL脚本,Command脚本和新的PowerShell脚本都存在于目录中C:\Users\iain.CORP\SqlcmdQuestion.
调用SQL脚本ExampleQuery.sql.它选择一个字符串文字.字符串文字的值由sqlcmd在运行时设置为ComputerNamesqlcmd脚本变量的值.代码如下所示:
SELECT '$(ComputerName)';
Run Code Online (Sandbox Code Playgroud)
命令脚本被调用ExecQuery.cmd.它调用sqlcmd来执行ExampleQuery.sql并将脚本变量ComputerName的值设置为环境变量的值COMPUTERNAME.代码如下所示:
sqlcmd -i ExampleQuery.sql -v ComputerName = %COMPUTERNAME%
Run Code Online (Sandbox Code Playgroud)
当我打开命令提示符时,默认工作目录是C:\Users\iain.CORP.我将更改到包含文件的目录,然后运行命令脚本:
cd C:\Users\iain.CORP\SqlcmdQuestion
ExecQuery.cmd
Run Code Online (Sandbox Code Playgroud)
我看到这个输出:
---------
SKYPC0083
(1 rows affected)
Run Code Online (Sandbox Code Playgroud)
该脚本成功选择sqlcmd设置的字符串文字.
PowerShell脚本称为ExecQuery.ps1.它应该与命令脚本一样,使用Invoke-Sqlcmd而不是sqlcmd.代码如下所示:
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Invoke-Sqlcmd -InputFile 'ExampleQuery.sql' -Variable "ComputerName = $Env:COMPUTERNAME"
Run Code Online (Sandbox Code Playgroud)
当我打开PowerShell提示符时,默认工作目录是Z:\.我切换到包含文件的目录,并运行PowerShell脚本:
cd C:\Users\iain.CORP\SqlcmdQuestion
.\ExecQuery.ps1
Run Code Online (Sandbox Code Playgroud)
我看到这个输出:
Invoke-Sqlcmd : Could not find file 'Z:\ExampleQuery.sql'.
At C:\Users\iain.CORP\SqlcmdQuestion\ExecQuery.ps1:4 char:14
+ Invoke-Sqlcmd …Run Code Online (Sandbox Code Playgroud) echo off
if "%4" == "" goto usage
cd %3
mkdir Logs
echo Logs can be found in %3\Logs
echo
goto %4
:smmdsp
echo Updating %2..xyz table on %1
sqlcmd -S %1 -E -p -e -d %2 -i "%3\xyz.SQL" > %3\Logs\xyz.SQL.log
goto done
:usage
echo.
echo Usage
echo.
echo where SqlServer = SQL Server name
echo Database = configuration database
echo InstallPath = path to the software update files
echo Feature = Feature to update
echo.
:done
Run Code Online (Sandbox Code Playgroud)
如果我在 C 盘 …
SQL Server 新手 - 我正在尝试使用 SQLCMD 实用程序通过 PowerShell 访问我的计算机上的 localdb\MSSQLLocalDB 服务器。我使用的是 PowerShell v5、.NET v5.0,服务器名称是(localdb)\MSSQLLocalDB我在 Microsoft SQL Server Management Studio 2014 中连接到它时的名称。
PS C:\> sqlcmd -S localdb\MSSQLLocalDB并PS C:\> sqlcmd -S .\localdb\MSSQLLocalDB导致此错误:
Sqlcmd:错误:适用于 SQL Server 的 Microsoft ODBC 驱动程序 11:SQL Server 网络接口:定位指定的服务器/实例时出错 [xFFFFFFFF]。
我在 Management Studio 中查询了服务器名称,并在上面的命令SELECT @@ServerName中使用了该名称-S,并得到了相同的错误。
PS C:\> sqlcmd -S localdb给出这个错误:
Sqlcmd:错误:适用于 SQL Server 的 Microsoft ODBC 驱动程序 11:命名管道提供程序:无法打开与 SQL Server 的连接 [53]
其他注意事项:我可以使用以下连接字符串连接到服务器并在 C# 控制台应用程序中使用名为testdb01的数据库:System.Data.SqlClient
"Data Source=(localdb)\\mssqllocaldb;Initial …Run Code Online (Sandbox Code Playgroud) 我想在我的 docker 映像中安装 sql cmd。我的 dockerfile 有这些命令来安装 sqlcmd (centos 7 基本映像)
RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo
RUN yum remove mssql-tools unixODBC-utf16-devel
RUN yum install -y unixODBC-devel mssql-tools
Run Code Online (Sandbox Code Playgroud)
以下是 docker 构建日志
Transaction test succeeded
Running transaction
Updating : libcom_err-1.42.9-17.el7.x86_64 1/14
Installing : unixODBC-2.3.7-1.rh.x86_64 2/14
Updating : libss-1.42.9-17.el7.x86_64 3/14
Installing : e2fsprogs-libs-1.42.9-17.el7.x86_64 4/14
Installing : e2fsprogs-1.42.9-17.el7.x86_64 5/14
Updating : 1:openssl-libs-1.0.2k-19.el7.x86_64 6/14
Installing : 1:make-3.82-24.el7.x86_64 7/14
Installing : 1:openssl-1.0.2k-19.el7.x86_64 8/14
/var/tmp/rpm-tmp.8S1dKq: line 17: /dev/tty: No such device or address
error: %pre(msodbcsql17-17.5.2.1-1.x86_64) scriptlet failed, …Run Code Online (Sandbox Code Playgroud) 我有一个 bash 脚本,用于在while 循环sqlcmd体中从数据库获取数据:
#!/bin/bash
tmpfile=$(mktemp)
echo -e "1\n2" > tmpfile
echo "---------------content from the tmp file--------------"
cat tmpfile
echo "------------------------------------------------------"
while read -r line || [[ -n $line ]]
do
echo "${line}"
echo " ------------sqlcmd operation start------------"
sqlcmd -Q "set nocount on;select 'dummy'"
echo -e " ------------sqlcmd operation done------------\n\n"
done < tmpfile
echo "-----------------------script done---------------------"
Run Code Online (Sandbox Code Playgroud)
预计会根据 file.txt 中的内容行进行交互,在本例中是两次,但实际上它将无限地交互第一行:

我得到了关于如何从这里解决无限循环的答案,当使用 sqlcmd 时循环变量被固定为常量
此处Unexpected behavior of file描 述符和/或 I/O 流在 ksh 中使用 -i 选项(从文件读取 sql)运行 sqlcmd …
我正在尝试以静默模式安装sqlcmd,但我无法弄清楚如何自动接受EULA.我正在尝试安装的文件名为"MsSqlCmdLnUtils.msi"(从MS下载中心下载).这是我到现在为止所尝试的(与谷歌一起发现):
msiexec /i "MsSqlCmdLnUtils.msi" /passive AcceptEndUserLicenseAgreement=1
msiexec /i "MsSqlCmdLnUtils.msi" /passive ACCEPTEULA=1
msiexec /i "MsSqlCmdLnUtils.msi" /passive ACCEPT=1
msiexec /i "MsSqlCmdLnUtils.msi" /passive EULA=1
Run Code Online (Sandbox Code Playgroud)
以及"= yes"而不是"= 1"的所有组合
我得到的只是ERRORLEVEL 1603(错误1603:安装过程中发生了致命错误.)
有任何想法吗?
sqlcmd ×11
sql-server ×7
powershell ×2
sql ×2
bash ×1
batch-file ×1
bcp ×1
centos ×1
cmd ×1
docker ×1
dockerfile ×1
ksh ×1
localdb ×1
t-sql ×1
tty ×1