我知道如何使用 PowerShell 和 SMO 编写存储过程脚本:
[System.reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | out-null
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server"
$srv.databases['MyDatabase'].StoredProcedures['MyProc'].TextBody
Run Code Online (Sandbox Code Playgroud)
但由于我想在查询中使用过程文本,我想知道是否可以在纯 T-SQL 中以某种方式调用 SMO。
只能在开发环境中运行。
顺便说一句:返回具有给定名称的存储过程定义的函数可以解决我当前的问题,但不能回答我的问题。
编辑:
当我使用这个查询时,我想找到哪些过程引用了给定的表:
SELECT p.name --, definition
FROM sys.sql_modules m
join sys.objects p on m.object_id = p.object_id
where p.type = 'P'
and definition like '%SearchForThis%'
Run Code Online (Sandbox Code Playgroud)
这与我想使用 SMO 获得的信息完全相同。
sql-server-2008 stored-procedures scripting sql-clr ole-automation
我需要在 SQL Server 上启用Ole 自动化过程服务器配置选项,但想知道这样做会带来哪些具体类型的安全风险?
启用此选项后如何利用安全性的示例是什么?
我在支持的 SQL Server 实例上遇到了问题,许多 Stack 站点都提供了有关这些功能的信息,但大多数站点基本上都说“不要使用这些;它们已被弃用/有问题/有漏洞”。我将尝试针对我的特定问题实施变通办法,但我的问题是诸如sp_OACreate
和 之类的功能何时sp_OAMethod
被弃用?我必须向我的 Sys Admin 和老板解释这一点,以证明重写是合理的,而且我通过谷歌搜索并没有遇到太多(尽管我的搜索词可能很差)。
我的任务是通过 t-sql 将 SQL Server 中保存的图像(作为 varbinary)提取到平面文件中。我已经有十多年没有做过 ETL 工作了,除了使用 sp_OACreate、sp_OAMethod 等之外,我不记得通过 t-sql 执行此操作的任何其他方法。
是否有一些新方法可以解决这个问题?更“可靠”并且不需要打开 OLE 自动化程序并做所有这些疯狂的事情的东西?
这将是一个持续的过程。不是一次性运行。
一些查询对我的 CPU 的影响非常严重。sp_WhoIsActive
报告这sp_OAMethod
就是原因(该sql_text
列指向它)并且它具有PREEMPTIVE_OS_GETPROCADDRESS
等待类型的巨大等待。鉴于这sp_OAMethod
是一个内置存储过程,我该如何调试它?
我使用的是 2019 版本的 SQL Server,15.0.something。