我发现了一些示例,其中如果存在存储过程,则将其删除或更改。
但是我如何编写严格执行以下操作的T-SQL批处理脚本:
?
创建存储过程时,它可能是批处理中的唯一语句。这意味着类似以下内容的操作将失败:
IF NOT EXISTS(SELECT 1 FROM sys.schemas s JOIN sys.procedures p ON s.schema_id = p.schema_id WHERE s.[name] = N'dbo' AND p.[name] = N'YourProcedure') BEGIN
CREATE PROC dbo.YourProcedure @TableName sysname AS
BEGIN
SELECT *
FROM sys.tables t
WHERE t.name = @TableName;
END;
END;
因此,如果要先检查该过程是否存在,然后如果不存在则创建它,则必须使用动态SQL:
IF NOT EXISTS(SELECT 1 FROM sys.schemas s JOIN sys.procedures p ON s.schema_id = p.schema_id WHERE s.[name] = N'dbo' AND p.[name] = N'YourProcedure') BEGIN
EXEC sys.sp_executesql N'CREATE PROC dbo.YourProcedure @TableName sysname AS
BEGIN
SELECT *
FROM sys.tables t
WHERE t.name = @TableName;
END;';
END;