我的数据库中有大量的存储过程。我们不断改变数据结构(我们正在开发中)是否有一个工具可以告诉我哪些存储过程不会编译?
创建存储过程时,如果存在无效的表或列,则会阻止您,但如果在创建存储过程后更改列名,则proc无效。我想得到那些无效过程的清单。
喝彩!
约瑟夫
答案 0 :(得分:3)
您可以在CodeProject中使用此工具,该工具使用内置SQL函数和选项生成无效存储过程的文本文件。
答案 1 :(得分:1)
你最好的办法是编写一些数据库单元测试,如果你使用的是VS2008那么它很简单,但很费时间。
但是,您可以运行测试并确保所有内容都按预期工作,或者获取您需要查看的功能列表。
您可能会发现这篇关于数据库单元测试的文章很有意思,但我相信它可能需要VS Team System。:
答案 2 :(得分:0)
要进行监视的一项重大改进是拥有一个持续集成(CI),它可以每隔一段时间(可能每两小时或每天一次)检查数据库中的对象。另一种选择是创建一个调用端点的Windows服务。
CI或Windows服务可以在有人中断构建时向开发团队发送通知。
在该后端的端点中,您可以有一个类似的过程,该过程将通知您有关数据库中有错误的视图,存储过程和函数。
CREATE PROCEDURE Get_Objects_With_Errors
AS
SET NOCOUNT ON;
DECLARE @objectName AS VARCHAR(255);
DECLARE @count int = 0;
-- Find all views in dbo schema
DECLARE listViews CURSOR FOR
SELECT [TABLE_NAME]
FROM INFORMATION_SCHEMA.VIEWS v
WHERE [TABLE_SCHEMA] = 'dbo';
OPEN listViews
FETCH NEXT FROM listViews into @objectName;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
BEGIN TRY
EXEC sp_refreshview @objectName;
END TRY
BEGIN CATCH
PRINT @objectName + ' has ERRORS : ' + ERROR_MESSAGE();
SET @count = @count + 1;
END CATCH
FETCH NEXT FROM listViews INTO @objectName;
END
CLOSE listViews;
DEALLOCATE listViews;
-- Find all procedures and functions in dbo schema
DECLARE listRoutines CURSOR FOR
SELECT SPECIFIC_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_SCHEMA = 'dbo'
GROUP BY SPECIFIC_NAME;
OPEN listRoutines
FETCH NEXT FROM listRoutines into @objectName;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
BEGIN TRY
EXEC sp_refreshsqlmodule @objectName;
END TRY
BEGIN CATCH
PRINT @objectName + ' has ERRORS : ' + ERROR_MESSAGE();
SET @count = @count + 1;
END CATCH
FETCH NEXT FROM listRoutines INTO @objectName;
END
CLOSE listRoutines;
DEALLOCATE listRoutines;
PRINT 'Total with errors : ' + CAST(@count AS nvarchar(10));
SET NOCOUNT OFF;
答案 3 :(得分:-1)
Create procedure data_tranfer
(@C1 int)
AS
BEGIN
INSERT INTO coindesk
(UPDATED,
UPDATEDISO,
UPDATEDUK,
USDCODE,
USDSYMBOL,
USDRATE,
USDDESCRIPTION,
USDRATE_FLOAT,
GBPCODE,
GBPSYMBOL,
GBPRATE,
GBPDESCRIPTION,
GBPRATE_FLOAT,
EURCODE,
EURSYMBOL,
EURRATE,
EURDESCRIPTION,
EURRATE_FLOAT)
SELECT UPDATED,
UPDATEDISO,
UPDATEDUK,
USDCODE,
USDSYMBOL,
USDRATE,
USDDESCRIPTION,
USDRATE_FLOAT,
GBPCODE,
GBPSYMBOL,
GBPRATE,
GBPDESCRIPTION,
GBPRATE_FLOAT,
EURCODE,
EURSYMBOL,
EURRATE,
EURDESCRIPTION,
EURRATE_FLOAT
FROM stagcoindesk
WHERE C1 = @C1
END;