首页 > 解决方案 > 创建视图必须是批处理中的第一条语句

问题描述

我正在从基于 .NET 的 Windows 应用程序运行一组脚本文件。其中一个文件具有以下脚本 -

IF EXISTS(SELECT * FROM SYS.VIEWS WHERE NAME = 'TP_LEAVEDATA') EXEC SP_RENAME 'TP_LEAVEDATA', 'TP_LEAVEDATA_BKP_EXPORT_TEST1' 
CREATE VIEW TP_LEAVEDATA AS
SELECT USERNAME, Dept, LeaveType, LeaveFrom, LeaveUpto FROM LeaveRequest_DATA

当我执行脚本时,我得到一个错误create view must be the first statement in the batch

我不能在这里使用GO关键字,因为我通过我的应用程序运行脚本,我不能使用执行 sp_executesql因为也有类似的文件用于创建存储过程(在查询本身中包含单个引号)。我现在有什么选择?

PS:虽然 create table 命令不会出现此问题。

标签: sql.netview

解决方案


你可以在它之前使用 put GO:

IF EXISTS(SELECT * FROM SYS.VIEWS WHERE NAME = 'TP_LEAVEDATA') BEGIN
    EXEC SP_RENAME 'TP_LEAVEDATA', 'TP_LEAVEDATA_BKP_EXPORT_TEST1' ;
END;
GO

CREATE VIEW TP_LEAVEDATA AS
    SELECT USERNAME, Dept, LeaveType, LeaveFrom, LeaveUpto
    FROM LeaveRequest_DATA;

另一种选择是使用动态 SQL 来创建视图。


推荐阅读