标签: sqlcmd

在 SQLCMD 中执行从 SSMS 生成的 TSQL 脚本。报价失败

我试图通过执行 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(''慢'');

是否有我应该执行或生成脚本以支持脚本中的引号的开关?

sql-server-2008 ssms scripting sqlcmd

9
推荐指数
1
解决办法
2713
查看次数

SQLCMD 模式下另一个变量内的变量

尝试使用 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-server scripting sqlcmd

9
推荐指数
1
解决办法
6493
查看次数

如何让 SQLCMD 只输出错误和警告?

在执行 SQL 脚本文件时,如何让 SQLCMD 只输出它遇到的任何错误或警告?

我基本上不希望输出基于信息的消息。

sql-server sql-server-2008-r2 sqlcmd

8
推荐指数
2
解决办法
2万
查看次数

抑制 SQLCMD 消息

是否可以抑制所有sqlcmd消息输出到cmd窗口?

我正在运行一个大型脚本,并且所有Processed XXXX total records消息似乎都减慢了很多。

该脚本超过 4Gb,因此有大量数据。

sql-server sqlcmd

8
推荐指数
2
解决办法
1万
查看次数

如何在sqlcmd中输出超过4000个字符

我制作了一个存储过程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

8
推荐指数
1
解决办法
1万
查看次数

为什么 sqlcmd -Lc 不显示本地实例?

我有两台机器,每台机器都安装了 SQL Server 2008 的默认实例;每个都表现出不同的行为。

  • 在 PC1 上,当我运行 时sqlcmd -Lc,当 SQL 浏览器服务未运行时,我在本地网络上的 SQL 服务器列表中看不到 PC1。当我启动 SQL 浏览器服务时,PC1 出现在列表中。
  • 在 PC2 上,当我运行时sqlcmd -Lc,无论 SQL Browser 服务是否正在运行,我都会在列表中看到 PC2。如果 SQL Browser 服务正在运行,我还会看到 PC2\SQLEXPRESS。

为什么 PC1 的默认 SQL 实例没有显示在 SQL Server 列表中?

sql-server-2008 sql-server sqlcmd

7
推荐指数
1
解决办法
1万
查看次数

如果我安装 SQL Server 客户端工具,我可以获得 OSQL 吗?

我们有一些遗留的 .bat 脚本,其中包含我们网络上现有 SQL Server 实例/数据库的 osql 命令。

我们已经尝试从我们的应用服务器 (Win Server 2008) 运行 .bat 脚本,但收到错误:“osql.exe' 未被识别为内部或外部命令”

我们希望我们不需要安装完整的 SQL Server 来访问 osql。

我听说你可以从客户端工具安装中获得它,只要连接到许可的 sql 服务器就不需要许可证。(我们会是)。

有人可以确认吗?“客户端工具”是安装光盘的一部分吗?
这是一个可行的解决方案吗?

谢谢大家的帮助!

sql-server sqlcmd

7
推荐指数
2
解决办法
3万
查看次数

在批处理文件中使用多个 SQLCMD 调用进行事务

有没有什么好方法可以做以下事情?

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)

sql-server transaction sqlcmd sql-server-2014

7
推荐指数
1
解决办法
5986
查看次数

如何将多个语句传递到 sqlcmd?

想要自动化一些任务而不是为所有事情启动 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)

scripting t-sql sqlcmd sql-server-2012

7
推荐指数
1
解决办法
1万
查看次数

在 PowerShell 中使用 @ExpertMode = 1 运行 sp_AskBrent

我正在尝试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运行时,我们注意到三件事:

  1. 它将每个数据输出到shell
  2. $check 一片空白
  3. 它以以下错误结束:

    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_AskBrentExpertMode数据存储到表中并随后从这些表中选择的参数,但我想确保无法在 PowerShell 中立即恢复所有内容。

sql-server powershell sqlcmd sp-askbrent

6
推荐指数
2
解决办法
1107
查看次数