gpt4 book ai didi

powershell - 使用 Invoke-SQLCMD、SMO 或 SQLConnection 哪个更好

转载 作者:行者123 更新时间:2023-12-03 16:40:45 27 4
gpt4 key购买 nike

我一直在创建一些 power shell 脚本,并且我主要使用 Invoke-Sqlcmd 作为查询数据库或输入 .sql 文件的一种方式,但是我在包含访问和终止进程方面遇到了一些麻烦。

我一直在使用 SMO 来终止进程

$SQlSvr1 = New-Object Microsoft.SqlServer.Management.Smo.Server $serverInstance
$SQlSvr1.KillAllprocesses($databaseMain)

然后使用 Invoke-Sqlcmd 运行我的进程,一切运行良好,直到我开始收到诸如
A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) 

如果我没有终止进程,它会返回

Exclusive access could not be obtained because the database is in use.



所以我的问题是,重新生成或保持稳定连接的最佳过程是什么?我不会将所有内容更改为 SMO 或 SQLConnection,或者是否有办法使用 Invoke-Sqlcmd 建立单个连接,但每次我都会杀死/重新排队使用调用。

有问题的脚本首先备份我的数据库,使用 try/catch 中的补丁脚本运行和更新,如果有错误,脚本将在 catch 中备份,所有使用 Invoke-Sqlcmd 除了终止进程。

最佳答案

三者各有千秋。

我喜欢 invoke-sqlcmd用于快速和脏查询,或其他文件中已经存在的查询(因为您可以传入文件参数)。不过,我从来没有处理过引发问题的错误。

我用 SQLConnection & SQLCommand当我需要更多安全性时 - 例如参数化查询 - 或者想要保持更持久的连接 - 当我快速连续运行大量查询时 - 这样我就不会在一个很短的时间。

SMO 我还没有真正使用过,但我会保留它用于在“系统”级别进行管理 - 作业、备份等。您几乎可以使用 SMO 做任何事情 - Wayne Sheffield 有添加和更改表和存储过程的示例his blog上个月(我无法链接到帖子,因为我的办公室防火墙出于未知原因阻止了它)。我通常会通过 T-SQL 查询来做到这一点,但它是双向的,而且我确信使用 SMO 来做这件事一定有一些优势。

关于powershell - 使用 Invoke-SQLCMD、SMO 或 SQLConnection 哪个更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15220883/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com