如何在sql脚本中动态创建和更改?
代替 如果退出-下降 我们希望拥有 如果退出-更改。
如何处理这种情况。
答案 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的较新版本将是首选。