如何在sql脚本中动态创建和更改?

时间:2019-03-27 19:53:06

标签: sql sql-server

如何在sql脚本中动态创建和更改?

代替  如果退出-下降 我们希望拥有 如果退出-更改。

如何处理这种情况。

2 个答案:

答案 0 :(得分:2)

为澄清我在上面的评论,请SQL Server 2016 SP1 released CREATE OR ALTER语句将创建一个尚不存在的对象,或者如果存在则对其进行修改。仅在某些对象(例如存储过程,触发器,函数和视图)上允许这样做。 CREATE OR ALTER语句不能使用分配了存储的表,索引和其他对象。另请注意,由于它们保留在磁盘上,因此不允许使用索引视图。语法的基本示例如下。

CREATE OR ALTER PROCEDURE SP_TestStoredProcedure 
AS 
BEGIN
SELECT
    Column1,
    Column2,
    Column3
FROM YourTable
END

答案 1 :(得分:1)

这是我用过的把戏。

-- for testing, not needed for real -- DROP PROCEDURE dbo.uspDoSomething
GO

IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' and ROUTINE_NAME =  'uspDoSomething' )
BEGIN
    EXEC ( 'CREATE PROCEDURE dbo.uspDoSomething(@i INT)     AS  BEGIN  RAISERROR (''Stubbed version'' , 16, -1) END' )
END

GO

--test only
EXEC dbo.uspDoSomething 0
GO

ALTER PROCEDURE dbo.uspDoSomething(@PatientKey INT)
AS
BEGIN
    SELECT @@VERSION
END

GO

--test only
EXEC dbo.uspDoSomething 0
GO

请记住,ALTER不会更改脚本上的所有权限。 DROP / ADD需要重新申请权限。

注意,您最初没有提到sql-server版本。此技巧适用于2014年及之前的版本。显然,与带有动态sql的EXEC相比,具有CREATE OR ALTER的较新版本将是首选。