标签: sqlcmd

有什么办法可以停止在 sqlcmd 中输入“go”?

如果我没记错的话,上次Microsoft Sqlcmd要求每个命令都以';'结尾 然后按 Enter 键执行命令。

但是,目前,我们需要在GO每次执行命令时键入 。

那么,是否有其他替代方法,当我们在以“;”结束命令后按 Enter 键时,它会执行命令吗?

sql-server-2008 sql-server sqlcmd

6
推荐指数
1
解决办法
2921
查看次数

在 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
查看次数

SSMS 登录框的有效连接字符串是什么?

SSMS 登录框的有效连接字符串是什么?

每隔一段时间,我将不得不连接到具有某些特定配置设置的 SQL Server 实例或在没有可用主机名的 DMZ 中,或者我将不得不通过 SSMS 或 SQLCMD 连接到专用管理连接 (DAC) . 因为我很少通过特定端口或使用 DAC 连接到 SQL Server,所以我往往会忘记启动和运行连接的确切语法选项。然后,我将不得不无数次再次搜索 Internet以检索确切的连接字符串,并且经常会因为找不到所需信息而感到沮丧。

研究

我将阅读之前发布在 Serverfault、Stackoverflow 和 DBA 上的所有问题和答案。

服务器故障

[1] DAC 连接端口 SQL Server 2005 SP3
[2]远程 SQL 服务器连接失败
[3] SQL Server 2008 R2 远程连接

堆栈溢出

[4]如何在SQL Server连接字符串中指定端口号?

数据库管理员

[5] DAC 连接错误

微软

此外,我将在 Microsoft 站点上搜索相关文章:

[6]如何配置 SQL Server 侦听特定端口
[7]配置 Windows 防火墙以允许 SQL Server 访问
[8]外围配置
[9]如何配置 SQL Server 侦听不同 IP 地址上的不同端口?
[10] …

sql-server ssms sqlcmd connectivity

6
推荐指数
1
解决办法
2995
查看次数

sqlcmd运行大型SQL文件导致CPU使用率高

我正在使用 sqlcmd.exe 运行一个大型 SQL 脚本,并且服务器 CPU 使用率在过去 5 小时内一直处于 100%。SQL 脚本文件的大小为 156 MB。我在 SQL Server 2005 上运行脚本。这对我来说并不正常。

使用 SQL Server Management Studio 运行脚本不是一种选择,因为它不会运行非常大的文件。

注意:我知道 SQL 脚本很好,因为我可以使用另一个工具(xSQL 数据)在本地机器上运行它。不幸的是,我无法访问服务器上的该工具。

sql-server-2005 sqlcmd

5
推荐指数
1
解决办法
2223
查看次数

使用 SQLCMD 运行查询与使用 SSMS 运行查询

我注意到一些我不确定的事情。难道直接使用 SSMS 运行查询比使用 SQLCMD 运行查询快得多?我注意到使用 SSMS 运行的查询结果写入磁盘的速度要快得多。

有什么区别?

谢谢。

sql-server ssms sqlcmd

5
推荐指数
1
解决办法
3322
查看次数

跳过有 GO 的部分

我正在编写一个可以在新服务器上运行的脚本以进行一些初始配置。我希望能够跳过某些部分,但我遇到的问题是所需的“GO”。由于 GO,我无法将我的代码段包装在 IF 语句中。例如

:setvar EnableDBMail 0

IF ($(EnableDBMail) = 1 )
BEGIN
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE
GO

END
....etc
Run Code Online (Sandbox Code Playgroud)

问题是这行不通,因为您必须使用 GO。还有另一种方法吗?我试过搜索,但还没有找到任何东西。

sql-server sqlcmd sql-server-2012

5
推荐指数
2
解决办法
732
查看次数

sqlcmd -b 不会在出错时退出

我很困惑我应该如何使用 sqlcmd 的 -b 参数。我正在尝试为我的数据库编写简单的自动化脚本,并希望在出现任何错误时停止执行。我正在使用 SQLServer 2008r2。

为了测试,我调用了简单的脚本

sqlcmd -b -i test.sql
Run Code Online (Sandbox Code Playgroud)

test.sql 内容:

PRINT 'test1'; 
RAISERROR ('Error raised', 15, 15);
PRINT 'test2';
Run Code Online (Sandbox Code Playgroud)

我希望在第一次打印后我会看到错误消息并且脚本会停止。但是每次执行第二次打印时,我都会看到以下输出:

test1
消息 50000,级别 18,状态 15,服务器 TOMEK,第 3 行
错误引发
test2

我做错了什么?

sql-server sqlcmd error-handling

5
推荐指数
1
解决办法
3702
查看次数

SQL Server 2016 SQL 代理令牌不起作用

我在整个企业的许多 SQL 代理作业步骤中都有这个,并且它按预期工作:

sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master -Q "EXECUTE MyStoredProc etc..."
Run Code Online (Sandbox Code Playgroud)

但是在我的新 SQL Server 2016 实例上,它只会产生一个命名管道连接错误(这是一个完全的红鲱鱼)。

另一方面,这在我的新服务器上运行良好:

sqlcmd -E -S MyExplicitServerName -d master -Q "EXECUTE MyStoredProc etc..."
Run Code Online (Sandbox Code Playgroud)

为什么 SRVR 令牌不起作用?
如果我在命令提示符下启动 sqlcmd 并告诉它打印$(ESCAPE_SQUOTE(SRVR))它说:

'SRVR' scripting vaiable not defined.
Run Code Online (Sandbox Code Playgroud)

这是一个非常基本的、简单的安装,只有默认实例。

sql-server sqlcmd sql-server-agent sql-server-2016

5
推荐指数
1
解决办法
2240
查看次数

sqlcmd :out 没有按预期工作?

考虑以下代码:

DECLARE @db sysname;
DECLARE @filename varchar(260);
DECLARE cur CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT d.name
FROM sys.databases d;
OPEN cur;
FETCH NEXT FROM cur INTO @db
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @filename = 'C:\temp\create_database_' + @db + '.txt';
    :setvar c @filename
    :out $(c)
    PRINT $(c);
    FETCH NEXT FROM cur INTO @db
END
CLOSE cur;
DEALLOCATE cur;
Run Code Online (Sandbox Code Playgroud)

我希望在 中创建多个文件C:\temp,每个数据库一个,但没有创建任何文件,并且 SQL Server 没有报告任何错误。

我试过使用 SQLCMD 模式在 SSMS 中运行它,我也试过从 sqlcmd.exe 运行它

sql-server sqlcmd

5
推荐指数
1
解决办法
3306
查看次数

使用 Invoke-Sqlcmd 时如何本机返回输出?

如何本地记录来自 PowerShell Invoke-Sqlcmd 的输出?

我正在使用 Invoke-Sqlcmd 循环遍历一个大的(50,000-90,000 个 SQL 文件,每个文件中有 1-10 个插入)小 SQL 插入语句集。大多数插入语句运行正确,但一些字符串太长,我收到“字符串或二进制数据将被截断”错误。

现在我正在使用 Start-Transcript 来捕获输出并识别有问题的插入语句,但 Start-Transcript 捕获了所有内容。我只想捕获错误 - 或者 - 只捕获 Invoke_Sqlcmd 语句输出。

如果这行得通(我认为应该如此),我就准备好了:

Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true | Out-File -FilePath "C:\Temp\Errorlog.txt" -Append
Run Code Online (Sandbox Code Playgroud)

或者,如果这有效:

Invoke-Sqlcmd -InputFile $sql -ServerInstance LocalHost -Database Test_DB -Credential $pwd -Verbose -OutputSqlErrors $true | Tee-Object -FilePath "C:\Temp\Errorlog.txt" -Append
Run Code Online (Sandbox Code Playgroud)

但这些都不起作用。

我也尝试过这种怪物,但我根本没有从中得到任何错误:

$sqls = (Get-ChildItem -Path "I:\2019_06_24\_SQL"-Filter *.sql | Sort-Object -Property CreationTime).FullName
        foreach ($sql in $sqls)
            {
            $Error.Clear()
            try …
Run Code Online (Sandbox Code Playgroud)

powershell sqlcmd

5
推荐指数
1
解决办法
2753
查看次数