gpt4 book ai didi

sql - 按以下方式创建 SQL Server 存储过程有哪些缺点?

转载 作者:行者123 更新时间:2023-12-03 00:35:54 25 4
gpt4 key购买 nike

我们将所有数据库对象作为可重新运行的脚本( View 、函数、触发器和存储过程等) checkin 源代码管理

在部署时,我们需要确保所有脚本都可重新运行且可重复,以便创建存储过程/将其更新到最新版本。

按照以下方式创建脚本有什么缺点吗?

IF NOT EXISTS 
(
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'dbo'
AND ROUTINE_NAME = 'MyStoredProcedure'
)
BEGIN
EXEC ('CREATE PROCEDURE [dbo].[MyStoredProcedure] AS SELECT 1')
-- ALSO DO ANY INITIAL GRANT PRIVILEGE SCRIPTING HERE
END
GO
ALTER PROCEDURE [dbo].[MyStoredProcedure] (
@param1 INT,
@param2 NVARCHAR(50) = 'Default String'
)
AS
BEGIN
-- DO SOMETHING WITH @param1 AND @param2
SELECT 1;
END
GO

本质上,脚本检查相关系统 View 中是否存在该对象,如果不存在,一些动态 sql 将其创建为 stub 以绕过 CREATE PROCEDURE/GO 语句条件 block 中不允许出现问题。然后它通过 ALTER 应用脚本的实际功能。

所以好处对我来说是显而易见的,我只是想知道这样做是否有任何缺点......除了编写稍微更详细的脚本的轻微开销之外。

最佳答案

这里有 10 年的 SQL Server 开发人员/架构师经验,除了创建执行此操作的脚本的(相对较小的)前期成本之外,我想不出任何缺点。

如果您担心在创建时编译为微不足道的计划在过程更改时不会重新编译,您可以为每个计划添加对 SP_RECOMPILE 的显式调用,但我在 SQL Server 中从未遇到过此问题(我已经在 DB2 中遇到过这种情况),所以我认为这是过度谨慎的做法。

这是一个有趣且我认为有用的方法。

关于sql - 按以下方式创建 SQL Server 存储过程有哪些缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972280/

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