sql - 创建视图必须是批处理中的第一条语句
问题描述
我正在从基于 .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 命令不会出现此问题。
解决方案
你可以在它之前使用 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 来创建视图。
推荐阅读
- c# - 如何将文本文件中的十六进制数据转换为字符串文件
- angular - 如何检索存储在 localStorage 中的对象的变量?
- sql-server - 如何更新 information_schema.columns 中的 column_name
- c++ - 尽管使用了-isystem,为什么clang在我的标题上报告警告,而gcc没有报告?
- android - 我无法使用 Firebase Google 登录方法登录
- anaconda - 安装 pyinstaller 后,通过 Anaconda 安装的 Spyder 无法正常工作
- php - Laravel 分类 + 文章的蛞蝓
- wordpress - 我们可以在没有 do_action 钩子的情况下执行 add_action 函数吗
- autodesk-forge - API 从 BIM360 Doc Plans 文件夹下载文件
- c++ - winrt 命名空间有控制台功能吗?