我已经编写了一个更改脚本来更新生产数据库中的架构。我必须删除一个视图并重新创建它们,因为该视图中的一列现在已被删除。
我打算用,
DECLARE @sql NVARCHAR(MAX);
SET @sql = '<View Definition>';
EXEC sp_executesql @sql;
如果有的话,使用这种方法有什么陷阱?您会建议哪些替代方案?
我在一个带有 Try catch 块的事务下拥有整个脚本。因此,当没有错误时,脚本将被提交否则回滚。我尝试使用如下 CREATE VIEW 命令,但在引入 TRASACTION 和 TRY-CATCH BLOCKS 后出现错误。这就是为什么要使用动态 SQL 语句 - EXEC sp_executesql .
错误是“创建视图必须是批处理中的唯一语句”
IF EXISTS ( SELECT * FROM sys.views WHERE name = 'VwViewName')
BEGIN
DROP VIEW VwViewName
END
IF NOT EXISTS ( SELECT * FROM sys.views WHERE name = 'VwViewName')
BEGIN
CREATE VIEW VwViewName
<VIEW DEFINITION>
END