我试图通过执行 SQL Server Management Studio 中的“生成脚本”工具生成的脚本将数据库部署到机器上。
这是我发出的命令:
sqlcmd -S LOCALHOST\sqlexpress -I -U user -P ******** -i
C:\Rollouts\NI-9-25-2012_10-42-AM\Rollout.sql > rolloutlog.txt
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误:
Sqlcmd: 错误: 文件'C:\Rollouts\ NI-9-25-2012_10-42-AM\Rollout.sql'中命令'''附近的第39488行语法错误。
当我使用文本编辑器查看此行时,所有迹象都指向一个带引号的问题。
有问题的行看起来像这样:
$(''.cat-menu-new'').slideDown(''慢'');
是否有我应该执行或生成脚本以支持脚本中的引号的开关?
尝试使用 SQLCMD 模式整理我的 SQL 脚本时遇到了一个问题:
:setvar db_suffix "some_suffix"
:setvar some_db "some_db_$(db_suffix)"
print 'some_db: $(some_db)'
Run Code Online (Sandbox Code Playgroud)
其输出是:
some_db: some_db_$(db_suffix)
Run Code Online (Sandbox Code Playgroud)
然而,我的预期是:
some_db: some_db_some_suffix
Run Code Online (Sandbox Code Playgroud)
有没有办法像这样进行变量插值?
(请注意,诸如此类的 T-SQL 函数CONCAT()将不起作用,因为我将使用该变量作为数据库名称)。
在执行 SQL 脚本文件时,如何让 SQLCMD 只输出它遇到的任何错误或警告?
我基本上不希望输出基于信息的消息。
是否可以抑制所有sqlcmd消息输出到cmd窗口?
我正在运行一个大型脚本,并且所有Processed XXXX total records消息似乎都减慢了很多。
该脚本超过 4Gb,因此有大量数据。
我制作了一个存储过程restoredatabase,它返回代码来恢复数据库。输出脚本如下所示:
restore database [DB] from disk='F:\FULL1.bak' with norecovery
restore database [DB] from disk='F:\DIFF1.bak' with norecovery
restore log [DB] from disk='F:\log1.bak' with norecovery
restore log [DB] from disk='F:\log2.bak' with norecovery
...
restore log [DB] from disk='F:\logN.bak' with norecovery
restore database [DB] with recovery
Run Code Online (Sandbox Code Playgroud)
在整个 SP 中,这些行被添加到一个参数@sql varchar(max)中,该参数最后以 打印print(@sql),如果用户指定了正确的标志,则以exec(@sql). 两者都完美地工作。但是,当像这样使用 sqlcmd 调用 SP 时:
set restoresql=exec restoredatabase @DB='Databasename', @Execute='y'
sqlcmd -h-1 -S SRV\T2 -U sa -P sa -d master -Q "%restoresql%" -o output.txt
Run Code Online (Sandbox Code Playgroud)
输出文件 …
sql-server stored-procedures sql-server-2008-r2 recovery sqlcmd
我有两台机器,每台机器都安装了 SQL Server 2008 的默认实例;每个都表现出不同的行为。
sqlcmd -Lc,当 SQL 浏览器服务未运行时,我在本地网络上的 SQL 服务器列表中看不到 PC1。当我启动 SQL 浏览器服务时,PC1 出现在列表中。sqlcmd -Lc,无论 SQL Browser 服务是否正在运行,我都会在列表中看到 PC2。如果 SQL Browser 服务正在运行,我还会看到 PC2\SQLEXPRESS。为什么 PC1 的默认 SQL 实例没有显示在 SQL Server 列表中?
我们有一些遗留的 .bat 脚本,其中包含我们网络上现有 SQL Server 实例/数据库的 osql 命令。
我们已经尝试从我们的应用服务器 (Win Server 2008) 运行 .bat 脚本,但收到错误:“osql.exe' 未被识别为内部或外部命令”
我们希望我们不需要安装完整的 SQL Server 来访问 osql。
我听说你可以从客户端工具安装中获得它,只要连接到许可的 sql 服务器就不需要许可证。(我们会是)。
有人可以确认吗?“客户端工具”是安装光盘的一部分吗?
这是一个可行的解决方案吗?
谢谢大家的帮助!
有没有什么好方法可以做以下事情?
SQLCMD -S %SERVER% -E -Q "BEGIN TRANSACTION"
FOR %%f in (script1 script2 script3) do (
SET CURRENT_SCRIPT=%%f
SQLCMD -S Localhost -E -b -V 1 -i %%f.sql -o %%f.log
IF !ERRORLEVEL! NEQ 0 GOTO ERROR
SET CURRENT_SCRIPT=
)
SQLCMD -S %SERVER% -E -Q "COMMIT TRANSACTION"
Run Code Online (Sandbox Code Playgroud) 想要自动化一些任务而不是为所有事情启动 SSMS,我正在尝试编写一个批处理文件来运行这些语句,当我将它们粘贴到 sqlcmd 提示符中时,它可以完美地工作。他们只是检查镜像状态,暂停镜像,然后再次检查状态。(为了最大限度地减少依赖性并简化从一台服务器到另一台服务器的迁移,我想将所有命令保存在一个文件中。)
select cast(DB_NAME(database_id) as char(30)),
cast(mirroring_state_desc as char(15))
from sys.database_mirroring
where mirroring_state_desc is not null;
go;
ALTER DATABASE db1 SET PARTNER SUSPEND;
ALTER DATABASE db2 SET PARTNER SUSPEND;
go;
select cast(DB_NAME(database_id) as char(30)),
cast(mirroring_state_desc as char(15))
from sys.database_mirroring
where mirroring_state_desc is not null;
go;
Run Code Online (Sandbox Code Playgroud)
所以,我写了这个批处理文件:
SETLOCAL ENABLEDELAYEDEXPANSION
SET @SQLSTRING=select cast(DB_NAME(database_id) as char(30)), ^
cast(mirroring_state_desc as char(15)) ^
from sys.database_mirroring ^
where mirroring_state_desc is not null; ^
go ^
^
ALTER DATABASE MSCRM_CONFIG SET PARTNER SUSPEND; ^
ALTER …Run Code Online (Sandbox Code Playgroud) 我正在尝试sp_AskBrent使用 PowerShell运行Invoke-SQLCmd并在变量中捕获其输出:
$query = "EXEC SAIDBA.monitoring.sp_AskBrent @Seconds=10;"
$check = Invoke-Sqlcmd -ServerInstance $ServerInstance -Query $query
-ErrorAction Stop -ConnectionTimeout 3
Run Code Online (Sandbox Code Playgroud)
使用ExpertMode = 0运行时,没问题。
但是当使用ExpertMode = 1运行时,我们注意到三件事:
$check 一片空白 它以以下错误结束:
Invoke-Sqlcmd:SQL PowerShell 中不允许出现重复的列名。要重复列,请使用 Column_Name AS New_Name 格式的重复列的列别名。
在行:1 字符:18
- $check = Invoke-Sqlcmd -ServerInstance $ServerInstance -Query $query -Er ...
- CategoryInfo: SyntaxError: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
- FullQualifiedErrorId : DuplicateColumnNameErrorMessage, Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
我认为有一种解决方法可以提供sp_AskBrent将ExpertMode数据存储到表中并随后从这些表中选择的参数,但我想确保无法在 PowerShell 中立即恢复所有内容。
sqlcmd ×10
sql-server ×8
scripting ×3
powershell ×1
recovery ×1
sp-askbrent ×1
ssms ×1
t-sql ×1
transaction ×1