我使用Visual Studio 2010的数据库版本和运行对SQL数据库实例同步了数据库这在我的项目(dbproj)的arent但新的比较对象的模式.我的解决方案包含许多项目,其中一些通过数据库引用相互引用.当我写从我的架构更新任何引用比较我的目标项目,在我的其他项目对象加入硬引用和不要使用得到添加数据库引用时设置的SQLCMD变量.
这会导致我的解决方案出现警告和错误,直到我手动换出sqlcmd变量的硬引用.我发现我可以重新制作数据库引用,它可以选择通过项目获取所有硬引用,但这仍然很麻烦.有没有办法使用为我的项目定义的现有sqlCmd变量集,以便使用变量引用将更新的内容写入我的项目?
我需要检查通过SQLCMD实用程序运行的查询的退出状态(成功/失败).例如,我连接的服务器没有数据库名称EastWind
.然后,下面的命令失败并显示消息...
> "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"
-S ZEPHIR -E -Q "USE WestWind"
Changed database context to 'WestWind'.
> echo %errorlevel%
0
> "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"
-S ZEPHIR -E -Q "USE EastWind"
Database 'EastWind' does not exist. Make sure that the name is entered correctly
> echo %errorlevel%
0
Run Code Online (Sandbox Code Playgroud)
我看到两种情况下的返回值都是相同的.如何检查命令是否失败SQLCMD
?
考虑以下sql脚本
:ON ERROR EXIT
PRINT 'Line 3'
GO
PRINT 'Line 6'
GO
SELECT * FROM NonExistingTable
GO
PRINT 'Line 12'
GO
Run Code Online (Sandbox Code Playgroud)
当您使用SQLCMD运行时
> sqlcmd -i MyScript.sql
Line 3
Line 6
Msg 208, Level 16, State 1, Server MyServer, Line 2
Invalid object name 'NonExistingTable'.
Run Code Online (Sandbox Code Playgroud)
当您在启用了SQLCMD模式的SQL Server Management Studio中运行时,您将获得
Line 3
Line 6
Msg 208, Level 16, State 1, Server MyServer, Line 2
Invalid object name 'NonExistingTable'.
** An error was encountered during execution of batch. Exiting.
Run Code Online (Sandbox Code Playgroud)
但是,当您双击错误行时,查询编辑器将跳转到有问题的行.
报告的第2行表示相对于批次的行号.批处理由GO语句分隔.我们希望获得真正的 …
我需要调用存储过程并从Powershell传递参数.我认为最好的选择是使用sqlcmd.exe,但我不知道如何使用此工具将参数传递给存储过程.
我正在尝试sqlcmd
使用以下命令从文件运行sql脚本:
sqlcmd -S <server> -d <database> -i <input file> -o <output file>
-U <user> -P <password>
Run Code Online (Sandbox Code Playgroud)
我运行我的sql文件并输出到日志文件.
问题是这改变了sqlcmd
文件的输出..我想得到输出到shell.
使用以下sqlcmd脚本:
sqlcmd -S . -d MyDb -E -s, -W -Q "select account,rptmonth, thename from theTable"
> c:\dataExport.csv
Run Code Online (Sandbox Code Playgroud)
我得到一个包含的csv输出文件
ACCTNUM,rptmonth,facilname
-------,--------,---------
ALLE04,201406,Allendale老年人生活社区 - LTC APPL02,201406,Applewood Estates ARBO02,201406,Arbor Care Centre
ARIS01,201406,樱桃山的AristaCare
...(139行受影响)
有没有办法摆脱列标题下的虚线:-------,--------,但保留列标题?
还有一种方法可以摆脱底部用于行数的两条线?
我尝试使用parm -h-1但是除去了列标题以及虚线.
我们正在使用Visual Studio Database Professional,它在部署时大量使用SQLCMD变量来区分环境.
我知道有几个指令可用于设置上下文(例如:connect for server name).脚本本身是否有办法强制执行SQLCMD模式?我们部署过程的一部分是让DBA检查并执行脚本,这将是一个很好的安全网(所以我不必提醒他们将执行模式设置为SQLCMD).
我有一个.sql脚本,我想从中构建一个数据库.如何在sqlcmd中执行此操作?我知道它是这样的:
CREATE DATABASE dbName
GO
Run Code Online (Sandbox Code Playgroud)
但是如何指定.sql脚本和位置来构建数据库?
我正在尝试编写一个powershell脚本,它将执行sqlcmd.exe来运行sql脚本.该脚本包含一个SQLCMD变量,我想通过sqlcmd的-v开关在命令行中传入该变量.问题是,PowerShell是做一些奇怪的,当我经过的路径作为我的变量,而这又导致SQL脚本失败的一个值.
比如说我打电话:
$path = 'C:\path'
sqlcmd -SMySQLServerInstance -i 'MySqlScript.sql' -v MyVariablePath=$path
Run Code Online (Sandbox Code Playgroud)
运行时我收到一个错误,上面写着:
Sqlcmd: ':\path': Invalid argument.
Run Code Online (Sandbox Code Playgroud)
没有我试过的双重或单引号$path
或MyVariablePath=$path
解决问题.
有人可以提供一个简单的规范示例,说明如何做到这一点?
我想运行一个.sql批处理脚本来从cmd窗口中删除许多表中的记录.所以,为此我尝试使用以下命令连接到我的本地SQLEXPRESS实例 -
sqlcmd -e -s\SQLEXPRESS
但是,我无法连接并收到以下错误:
'Named Pipes Provider: Could not open a connection to SQL Server [2]'.
Run Code Online (Sandbox Code Playgroud)
我从错误消息中注意到的另一个奇怪的事情是上面的命令试图连接到SQL Server 2005,而在我的机器上运行的实例是SQLEXPRESS 2008.
任何人都可以指导.
PS我正在使用Windows身份验证连接到SQLEXPRESS,这是我使用Mgmt Studio进行连接时的情况.