Invoke-Sqlcmd 运行脚本两次

2024-05-30

我遇到了一个非常奇怪的问题并且可以重复。

基本上,我使用invoke-sqlcmd通过使用-inputfile来调用脚本文件,但是如果脚本文件存在一些执行错误(例如插入到列不应为空的表中),则脚本文件将被执行两次。我也可以从探查器中看到这两个执行。

这是重现问题的方法(我的环境:Windows 8.1 + SQL 2014 + OS 5.0)

  1. 在数据库中创建两个表

    Use TestDB
    
    create table dbo.s (id int identity primary key, b varchar(50));
    
    create table dbo.t (id int primary key, s_id int, b varchar(50));
    alter table dbo.t add constraint fk_t foreign key (s_id) references dbo.s(id)
    
  2. 现在创建一个包含以下两行的 sql 文件(我们称之为 c:\temp\t.sql)

    insert into dbo.s ( b) select  'hello world'
    insert into dbo.t (s_id, b) -- purposely missing id to cause an error
    select 1, 'good morning'
    
  3. 运行以下 PS cmdlet

    invoke-sqlcmd -Server "<my_local_server>" -database TestDB -inputfile "c:\temp\t.sql"
    

现在,如果您打开 SSMS 查询窗口并执行以下操作,您的 PS 将返回错误

select * from TestDB.dbo.s

You will see two records there instead of one. Two records On the other hand, if I run sqlcmd.exe, there is NO such issue, i.e. just one record in dbo.s. Is there some configuration in SQLPS I missed?


我看到您在 MSDN 数据库引擎论坛上问了同样的问题:https://social.msdn.microsoft.com/Forums/en-US/d4167226-2da7-49ec-a5c2-60e964785c2c/powershell-invokesqlcmd-calls-stored-procedure-second-time-after-query-timeout-is-已到期 https://social.msdn.microsoft.com/Forums/en-US/d4167226-2da7-49ec-a5c2-60e964785c2c/powershell-invokesqlcmd-calls-stored-procedure-second-time-after-query-timeout-is-expired。以下是该线程的 SMO 解决方法。

$SqlServerName = "YourServer";
$DatabaseName = "YourDatabase";
$ScriptFileName = "C:\Scripts\YourSqlScriptFile.sql";

Add-Type -Path "C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.Smo.dll";

$sr = New-Object System.IO.StreamReader($ScriptFileName);
$script = $sr.ReadToEnd();
$sr.Close();

$Server = New-Object Microsoft.SqlServer.Management.Smo.Server($SqlServerName);
$db = $Server.Databases[$DatabaseName];
$db.ExecuteNonQuery($script);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Invoke-Sqlcmd 运行脚本两次 的相关文章

  • 从表变量中获取列的明确名称

    我可以这样声明一个表变量 DECLARE tv source TABLE c1 int providerName varchar 50 providerSMS varchar 50 如果我执行以下命令 我会看到类似于以下内容的表名称 468
  • 从 JDBC MSSQL 获取返回值

    我使用 Microsoft SQL Server JDBC Driver 2 0 通过 Java 连接到 SQL Server 2005 如何从存储过程中获取返回值 我正在做类似的事情 Connection connection dataS
  • 如何处理 FOR XML PATH/AUTO 中的空白值 - SQL Server?

    有没有人对这种 SQL Server 行为有任何见解或遇到过 当空白值转换为数据类型时 char 或具有 的列char 作为数据类型 处理使用For XML PATH 它返回 XML 结果 20 空格的特殊字符编码 当相同的空白值转换为va
  • PowerShell - 提示“您想继续吗”

    我有一个脚本用于自动化 WSUS 进程 它的最后阶段继续删除所有旧的 不必要的文件 对象 我想在清理阶段之前提示 按 输入 继续删除或按任何其他键停止 以便人们可以选择不运行它 我目前在脚本末尾的代码在这里 Get WsusServer 1
  • 字符串比较在 PowerShell 函数中不起作用 - 我做错了什么?

    我正在尝试创建一个别名git commit它还将消息记录到单独的文本文件中 然而 如果git commit回报 nothing to commit working directory clean 它不应该将任何内容记录到单独的文件中 这是我
  • 使用带有等于和句点的单连字符参数执行外部命令

    我有一个接受这样的参数的工具 例如在test ps1 foo exe name john 因此 每个参数都用一个连字符指定 名称 等于 然后是参数的值 当我从 PowerShell 调用这个精确表达式时 它执行时没有任何问题 但是 当其中一
  • SQL Server 存储过程更新不适用于 ASP.Net C# GridView RowUpdating

    我遇到了问题 但没有抛出任何错误 发生的情况是 我有一个存储过程正在驱动我的更新 但我无法更新 gridview 我击中了Update链接按钮 但它实际上并没有更新记录 这是我的存储过程 ALTER PROCEDURE dbo CompDe
  • 在 PowerShell 中按列拆分文本

    我是一个 PowerShell 新手 通常是 Bash 目前正在尝试获取 qwinsta 输出以显示谁以 rdpwd rdesktop 用户身份登录 以便我可以根据用户名列表检查每个用户名 如果它们不匹配 请将其注销 我目前正在解决两个问题
  • 将多对多关系中的所有相关记录分组,SQL 图形连接组件

    希望我错过了一个简单的解决方案 我有两张桌子 其中包含一份公司列表 第二个包含出版商列表 两者之间的映射是多对多的 我想要做的是将表 A 中与表 B 中的发布商有任何关系的所有公司捆绑或分组 反之亦然 最终结果看起来像这样 GROUPID
  • 从 MySql 迁移到 Sql Server 2008

    我有大约 200 GB 的 Mysql 转储文件 现在我需要迁移到 Sql server 2008 那么我应该遵循什么方法 我应该继续逐行 sql 语句还是有任何适合我的要求的 GUI 工具 微软 SQL Server 迁移 Assista
  • 从 Grunt 执行 PowerShell 脚本

    我有一个 PowerShell 脚本 myScript ps1 需要作为构建过程的一部分运行 我正在使用 Grunt 来构建我的代码 我不知道如何从 Grunt 运行这个脚本 有谁知道如何从 Grunt 运行 PowerShell 脚本 以
  • 在 Powershell 中的 Export-Csv 中使用和不使用管道的区别

    这可能更多的是 PowerShell 如何处理变量和管道 而不是一个特定的编程问题 但由于 对我来说 这似乎是奇怪的行为 我想我应该将其发布在这里 我只是在使用 PowerShell 将变量导出到 CSV 时遇到了一些困难 并发现这个堆栈问
  • Azure DevOps - 在 PowerShell 脚本中设置和使用变量

    我有一个 Azure DevOps 构建管道 其中有两个单独的 PowerShell 脚本 在第一个脚本中 我从 XML 文件中获取一个值 并将该值设置在环境变量中 在我的第二个脚本中 我想使用环境变量中的值 不幸的是 我没有看到环境变量被
  • 从 WiX 引导 SQL Express?

    我正在开发一个 WPF 应用程序 并使用 WiX 作为安装程序 我想开始使用 SQL Express 2012 但希望首先解决安装程序问题 我正在寻找使用 WiX 检测 引导 安装 升级和卸载 SQL Express 2012 的完整示例
  • 重新安装 SYBASE oledb 提供程序后,它不会出现在 SSIS 连接管理器中

    我已重新安装 Sybase Adaptive Server Enterprise PC 客户端 12 5 4 之后它就从 SSIS 连接管理器中完全消失了 我该如何修复它 使用 ADO Net 而不是 OLEDB 当您需要连接到 Sybas
  • 将 C# MVC 应用程序连接到远程 SQL Server 数据库

    我有一个 SQL Server 数据库位于http 192 168 10 3 MyDB 我创建了一个 C MVC 应用程序 我需要知道将我的应用程序连接到上述数据库的步骤 是不是只替换了连接字符串web config file Data S
  • 无法删除 SQL Server 2005 中的约束,“无法删除约束。请参阅以前的错误”

    我正在尝试删除数据库表上的约束 例如 ALTER TABLE MyTable drop CONSTRAINT FK MyTable AnotherTable 但执行只是运行 运行 如果我停止它 我会看到 Msg 3727 Level 16
  • SQL Server,误导性的 XLOCK 和优化

    从我最近所做的一些测试和阅读来看 XLOCK 的 X 独占 名称部分似乎具有误导性 事实上 它并不比 UPDLOCK 多加锁 如果它是独占的 它将阻止外部 SELECT 但事实并非如此 我无法从阅读或测试中看出两者之间的区别 XLOCK 唯
  • 使用 PHP 连接到 MSSQL Server 2008

    我们在 Windows Server 2008 R2 上使用 MS SQL Server 2008 并已安装Apache 2 2 19 and PHP 5 2 17 分别地 我们已经安装了 PHP 的 MSSQL 模块并使用以下连接字符串
  • 使用工作日和日历日更新表格

    我在 SQL Server 2012 中有一个表 每月手动更新一次 以反映文件预计进入的日期 日期规则已经有值 但预期日期列是手动更新的 如果预计在 BD1 第 1 个工作日 我将更新到该月的第一个非周末 如果预计在 CD1 日历日 1 我

随机推荐

  • Perl:模板工具包的替代品

    我使用模板工具包来扩展现有的领域特定语言 verilog 已经超过 3 年了 虽然总的来说我对此感到满意 但主要的刺激性是 当出现语法 undef 错误时 错误消息不包含用于调试错误的正确行号信息 例如我会收到一条消息 指示 0 未定义 因
  • 在android中点击地图获取坐标

    我正在尝试做这样的事情 我有一个地图活动 当用户点击地图时 它会显示该位置的坐标 我已经重写了 onclick 方法 但它甚至没有被调用 任何想法 public class MapPoint extends MapActivity impl
  • rspec 用户测试给出“未定义的局部变量或方法‘confirmed_at’”

    我的 rspec 测试给了我 NameError undefined local variable or method confirmed at for
  • 将 NSDictionary 保存到文件有任何限制吗

    我想用下面的方法来保存NSDictionary void writeDicToFile NSDictionary dic fileName NSString fileName NSString filePath NSTemporaryDir
  • Javascript 制作音频 blob

    我正在测试 html 音频标签 我想制作音频 blob url 就像 youtube 或 vimeo 那样 并将其添加到 src 开始播放音频 我一直在测试new Blob and URL createObjectURL 但我不知道如何使用
  • 为什么我的 NSTableView 中的图像淡出?

    首先 有一个NSArrayController 服务器 其内容是 服务器 对象的数组 我也有一个NSTableView与一列 该列绑定到服务器的 arrangedObjects status 属性 我用的是自定义的NSValueConver
  • 不同类型的列表?

    data Plane Plane point Point normal Vector Double data Sphere Sphere center Point radius Double class Shape s where inte
  • Applescript 应用程序从文件中读取

    我有一个已编译的 AppleScript 应用程序 已将其移至 Windows 服务器 然后我想将一个文本文件插入到应用程序中 在 Windows 上看起来像一个 zip 文件 myapplescript app Contents Reso
  • 在列表中查找匹配项的最简洁方法

    在列表中查找内容的最佳方式是什么 我知道 LINQ 有一些不错的技巧 但我们也可以获取有关 C 2 0 的建议 让我们对这个常见的代码模式进行最佳重构 目前我使用这样的代码 mObjList is a List
  • 如何在Python中反转列表的列表? [复制]

    这个问题在这里已经有答案了 我想知道如何反转 python 中的列表列表 例如 原来的 list 1 2 3 4 5 6 7 8 9 输出 new list 7 8 9 4 5 6 1 2 3 现在 我正在尝试这样做 new list re
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • 从我的应用程序 Helm 图表配置第三方 Helm 图表

    我似乎在任何地方都找不到任何关于此的明确信息 但是 Helm 图表中是否有可能需要第三方 例如stable jenkins 并指定配置值 我看到的所有示例都是为了运行helm install直接命令 但我希望能够将其配置为我的应用程序的一部
  • Opera 中 margin-bottom 的计算方式不同

    我有一个具有相对位置的 div 和一个具有绝对位置的子 div div class out div div div CSS container width 100px height 100px position relative insid
  • ASP.NET 会员电子邮件验证

    尝试基于 C 创建电子邮件验证本文 https web archive org web 20211020153319 https www 4guysfromrolla com articles 062508 1 aspx 我创建了一个 ja
  • Strongloop 环回 如何使用路由进行静态服务?

    我想做类似的事情 server js app use client loopback static dirname client using middleware json 但该示例仅适用于根 files loopback static p
  • 3D 空间中两个盒子之间的交集

    我想为我的图形引擎实现一个碰撞检测系统 我不知道这是否是常见的方法 但我的想法是将任何实体对象 如网格或相机 绑定在 3D 盒子内 这会给我比球体更准确的结果 这个盒子由八个顶点定义 x0 min vertices x off parsin
  • 使用 jstl 进行调试 - 具体如何进行?

    我一直试图理解BalusC的回答 https stackoverflow com questions 3177733 how to avoid java code in jsp files关于可调试性 我仍然无法弄清楚 jstl 标签如何比
  • PinnedHeader Google 加上 GridView?

    背景 Google google 应用程序可以很好地查看 亮点 类别中的图像 对于该屏幕上的每个部分 他们制作了一个标题 其中包含可单击的文本和一个用于选择该部分的所有照片的按钮 对于每个部分 他们还以网格状方式显示照片 它是这样的 这是另
  • Maven 2 未运行 Junit 4 测试

    我在确保运行 Junit4 测试时遇到问题 同样的问题也被报告在https stackoverflow com questions 2021771 sort newest sort top https stackoverflow com q
  • Invoke-Sqlcmd 运行脚本两次

    我遇到了一个非常奇怪的问题并且可以重复 基本上 我使用invoke sqlcmd通过使用 inputfile来调用脚本文件 但是如果脚本文件存在一些执行错误 例如插入到列不应为空的表中 则脚本文件将被执行两次 我也可以从探查器中看到这两个执