当前位置: 首页 > 面试题库 >

从Powershell Invoke-Sqlcmd进行错误检测并非总是有效?

宋建柏
2023-03-14
问题内容

通过执行位于文件夹中的查询列表来更新数据库

我需要能够检测到也会导致SQL Server Management Studio中“错误完成查询”的 任何 错误。

下面的工作来检测“无效的对象”错误:

PS SQLSERVER:\> $ErrorActionPreference
Stop
PS SQLSERVER:\> $Error.Clear()
PS SQLSERVER:\> $Error
PS SQLSERVER:\> Invoke-Sqlcmd -ServerInstance .\SQLEXPRESS -Database Test -Query "select * from doesnotexist" -ErrorAction SilentlyContinue
PS SQLSERVER:\> $Error.Exception
Invalid object name 'doesnotexist'.
PS SQLSERVER:\>

做同样的选择1/0确实 工作:

PS SQLSERVER:\> $ErrorActionPreference
Stop
PS SQLSERVER:\> $Error.Clear()
PS SQLSERVER:\> $Error
PS SQLSERVER:\> Invoke-Sqlcmd -ServerInstance .\SQLEXPRESS -Database Test -Query "select 1/0" -ErrorAction SilentlyContinue
PS SQLSERVER:\> $Error.Exception
PS SQLSERVER:\>

我希望这会导致“遇到零除错误”错误,就像在SSMS中一样。

没有检测到此特定错误,使我想知道是否还会保留其他错误。

知道为什么会发生这种情况以及如何确保可以检测到 所有 错误吗?

更新

事实证明,我要安装的服务器上没有Invoke-Sqlcmd,因此,第二想我必须使用sqlcmd.exe。

我认为这对我有用:

$tempfile = [io.path]::GetTempFileName()
$cmd = [string]::Format("sqlcmd -S {0} -U {1} -P {2} -d {3} -i {4} -b > $tempfile",
    $g_connectionstring."Data Source",
    $g_connectionstring."User ID",
    $g_connectionstring."Password",
    $g_connectionstring."Initial Catalog",
    $path)
Invoke-Expression -Command $cmd
if ($LASTEXITCODE)
{
    $err = Get-Content $tempfile | Out-String
    Corax-Message "SQL" "Error" $err
    exit
}
Remove-Item $tempfile

问题答案:

无论ErrorAction设置如何,invoke-sqlcmd cmdlet在SQL Server 2008、2008
R2和2012版本的cmdlet中都存在一个错误,在该错误中,除以0之类的T-SQL错误不会导致错误。我在此上记录了一个连接项,您可以在此处查看详细信息:

https://connect.microsoft.com/SQLServer/feedback/details/779320/invoke-
sqlcmd-does-not-return-t-sql-
errors

注意:此问题已在SQL 2014中修复,但是似乎未解决或将为以前的版本提供。



 类似资料:
  • 本文向大家介绍什么是错误检测?,包括了什么是错误检测?的使用技巧和注意事项,需要的朋友参考一下 当数据从一台计算机共享到另一台计算机时,系统不会保护该计算机接收的信息是否实际上是另一台计算机传输的数据。错误是当在接收器端接收到的消息与发送的消息不可互换时。 错误类型 以下是错误的类型- 单位错误 当仅将数据包中的单个位从1更改为0或从0更改为1时,会发生这些错误。这些类型的错误最有可能在数据的并行

  • 我想从. dat文件恢复MSSQL数据库。 通过在Windows PowerShell上调用以下命令/语句或将其保存在一个文件夹中,我成功地做到了这一点。bat文件并运行文件本身: 但是,由于我需要在不同的数据库中多次重复此指令,因此我希望使用Python在循环中执行此操作。我尝试使用子流程模块复制上述指令。没有成功。 我的Python代码如下所示: 在Windows PowerShell上运行此

  • 当在我的pom.xml中启用强制使用JUnit47提供程序时,我得到: pom.xml如下所示

  • 我从我的PC在之后对运行了以下查询。(我需要使用Windows集成安全性) 它的错误是 调用Sqlcmd:用户“NT AUTHORITY \ ANONYMOUS LOGON”的登录失败。 然后我做了以下步骤。 在远程服务器上, 它回来了 在我的PC上。 但我还是有错误?

  • 我目前正在建立一个卷积神经网络来区分清晰的心电图像和有噪声的心电图像。 带噪声: 无噪音: 下面是我用来预测训练模型的代码。 我不知道为什么会发生这种情况,即使我从未使用相同的图像进行测试、验证或培训。有人能帮我一下吗?我尝试了所有的方法,用不同的超参数训练模型,但每次这个模型都输出。

  • 问题内容: 环境:Ubuntu x86_64(14.10),Oracle JDK 1.8u25 我尝试使用的并行流,但我想要第一行(这是带有标头的CSV文件)。因此,我尝试这样做: 但是随后一列无法解析为一个整数… 所以我尝试了一些简单的代码。文件问题很简单: 代码也同样简单: 我 系统地 得到了以下结果(好的,我只运行了大约20次): 我在这里想念什么? 编辑 似乎问题或误解根源远不止于此(以下