gpt4 book ai didi

sql - 您在 SQL Server 中做什么来创建或更改?

转载 作者:行者123 更新时间:2023-12-01 17:33:04 27 4
gpt4 key购买 nike

今年是 2009 年,SQL Server 没有 CREATE OR ALTER/REPLACE。这就是我所做的。

IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_NAME = 'SynchronizeRemoteCatalog'
AND ROUTINE_SCHEMA = 'dbo'
AND ROUTINE_TYPE = 'PROCEDURE')
EXEC ('DROP PROCEDURE dbo.SynchronizeRemoteCatalog')

CREATE PROCEDURE dbo.SynchronizeRemoteCatalog
AS BEGIN
-- body
END

对于触发器,您必须依靠专有的系统 View 。

这是目前最受接受的惯例吗?

编辑: 正如 n8wrl 所建议的,official word表明此功能不是一个高优先级。因此就有了这个问题。

最佳答案

本文很好地阐述了在 SQL Server 中删除对象时丢失权限的问题。

所以这是保留权限的方法:

IF OBJECT_ID('spCallSomething') IS NULL
EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO

ALTER PROCEDURE spCallSomething ...
--instead of DROP/CREATE

也适用于函数,只需将上述代码中的 PROCEDURE 替换为 FUNCTION 即可。

考虑这样做的另一个原因是对失败的容忍。假设您的 DROP 成功,但您的 CREATE 失败 - 最终数据库损坏。使用 ALTER 方法,您最终将得到该对象的旧版本。

关于sql - 您在 SQL Server 中做什么来创建或更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1434160/

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