sql-server - 如何使用 SQL 提取作为任何给定更改的一部分部署的任何存储过程的详细信息?
问题描述
我正在寻找编写一些代码,可用于收集作为同一更改的一部分部署的项目。
在他们那一刻,我正在使用下面的代码,
DECLARE @Package INT = (SELECT MAX(package_id) FROM SSISDB.catalog.packages WHERE [name] = 'MyPackage.dtsx')
SELECT pr.project_id
, pr.[name]
, pr.last_deployed_time
, pr.deployed_by_name
, pa.[name]
, pa.version_build
FROM SSISDB.catalog.projects pr
INNER JOIN SSISDB.catalog.packages pa ON pr.project_id = pa.project_id
WHERE pa.package_id = @Package
这目前针对的是发布给定 SSIS 包的时间,但有时我可能必须检查仅是存储过程更改的解决方案,因此没有 SSIS 包)。
有没有办法通过 SQL 以类似的方式获取存储过程更改?
解决方案
在与其中一位开发人员讨论后,我得出了以下代码,虽然使用了动态 SQL,但测试人员除了 tempdb 之外没有任何权限,因此他们可以安全使用。
DECLARE @DaysBack VARCHAR(2) = '-1'
IF OBJECT_ID('tempdb..#T') IS NOT NULL
DROP TABLE #T;
IF OBJECT_ID('tempdb..#D') IS NOT NULL
DROP TABLE #D;
CREATE TABLE #D (
[DBName] [NVARCHAR](128) NULL,
[SchemaName] [NVARCHAR](128) NULL,
[name] [NVARCHAR](128) NOT NULL,
[type_desc] [VARCHAR](30) NOT NULL,
[create_date] [datetime] NULL,
[modify_date] [datetime] NULL,
)
SELECT ROW_NUMBER() OVER (ORDER BY name ASC) AS cnt
, name
INTO #T
FROM sys.databases
DECLARE @sqlVar INT = (SELECT MAX(cnt) FROM #T);
DECLARE @DBName NVARCHAR(128);
DECLARE @SQL NVARCHAR(4000);
WHILE @sqlVar > 0
BEGIN
SET @DBName = (SELECT name FROM #T WHERE cnt = @sqlVar)
SET @SQL =
'BEGIN TRY
INSERT INTO #D
SELECT ''' + @DBName + ''' AS DBName
, schema_name(schema_id) AS SchemaName
, [name]
, [type_desc]
, [create_date]
, [modify_date]
FROM ' + @DBName + '.sys.objects
WHERE [modify_date] > DATEADD(dd,' + @DaysBack + ',GETDATE()) AND
[type] NOT IN (''S'',''U'',''PK'',''D'',''V'',''FN'',''UQ'',''SQ'',''IT'',''F'',''TF'',''IF'',''TT'')
END TRY
BEGIN CATCH
END CATCH
'
--SELECT @SQL
EXEC sp_executesql @SQL
SET @sqlVar = @sqlVar-1
END
SELECT * FROM #D ORDER BY modify_date DESC
推荐阅读
- python - 如何对图像进行单元测试作为python中的输入和输出?
- c++ - 从当前索引从右到左计算数据结构中元素的数量并打印每个元素的计数
- python - 保留列表元素中的前 X 个单词,同时保持列表一维?
- r - 有没有办法将 if 语句与过滤功能结合起来?
- html - 背景:url(),背景图像:url()不起作用
- python - 从另一个 .py 文件方法停止 apscheduler 作业
- sqlite - 仅当将函数应用于字段时才能从 sql 查询中获取结果。它是 Poco::Data 的错误吗?
- javascript - Javascript:停止使用 clearInterval 时的 setInterval Timer 无法再次重新启动
- hyperledger-fabric - 访问和更新资源的关系字段
- android - 小时之间是小时范围吗?