gpt4 book ai didi

tsql - 从 SQLCMD 执行 CREATE VIEW 和 ALTER VIEW

转载 作者:行者123 更新时间:2023-12-02 21:59:21 25 4
gpt4 key购买 nike

我正在尝试使用 sql cmd 执行包含以下内容的 sql 文件。

sqlcmd -S localhost\dbInstance -i Sample.sql -v  filepath="C:\Sql\"

示例.sql 内容:

USE Sample_db
GO
BEGIN
BEGIN TRANSACTION;
BEGIN TRY
CREATE VIEW [dbo].[Test_View]
AS SELECT * from Sample_table;

ALTER VIEW [dbo].[Sample_View]
AS SELECT * FROM table_9;

ALTER TABLE [Sample_Table_2] ADD Col_4 VARCHAR(20);

END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrorNumber ,
ERROR_SEVERITY() AS ErrorSeverity ,
ERROR_STATE() AS ErrorState ,
ERROR_PROCEDURE() AS ErrorProcedure ,
ERROR_LINE() AS ErrorLine ,
ERROR_MESSAGE() AS ErrorMessage;

IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;

END CATCH;

IF @@TRANCOUNT > 0
COMMIT TRANSACTION;

END
GO

当我执行 sqlcmd 时,它抛出以下错误:

C:\Sql>sqlcmd -S localhost\dbInstance -i Sample.sql -v  filepath="C:\Sql\"
Changed database context to 'Sample_db'.
Msg 156, Level 15, State 1, Server localhost\dbInstance, Line 5
Incorrect syntax near the keyword 'VIEW'.

问题:为什么我无法从 sqlcmd 创建 View 和更改 View ,但可以更改表?当我注释掉 CREATE VIEW 和 ALTER VIEW 语句时,脚本执行得很好。

谢谢!

最佳答案

根据手册:

The CREATE VIEW must be the first statement in a query batch.

尽管说实话,该语句相当具有误导性,因为实际上 CREATE VIEW 必须是批处理中的唯一语句,您可以确定您可以从这个非常简单的测试示例中了解一下:

CREATE VIEW issue illustration

消息 Pane 中的错误消息显示关键字“SELECT”附近的语法不正确,但如果将鼠标悬停在带下划线的CREATE VIEW语句上时,会出现一条提示消息,表明您不能在 CREATE VIEW 之前或 SELECT 语句之后放置任何内容。

这与ALTER VIEW完全相同。

因此,您可以在事务中执行CREATE VIEW和/或ALTER VIEW语句(通过分隔它们)与 GO 关键字),但您将无法使用 BEGIN TRY ... BEGIN CATCH 来捕获这些语句引发的异常。

除非,正如 Aaron Bertrand 正确提醒我的那样,您使用 EXEC(...)EXEC sp_executesql ... 将这些语句作为动态查询执行,也许像这样:


BEGIN TRY
<b>EXEC sp_executesql N'</b>CREATE VIEW [dbo].[Test_View]
AS SELECT * from Sample_table<b>'</b>;

<b>EXEC sp_executesql N'</b>ALTER VIEW [dbo].[Sample_View]
AS SELECT * FROM table_9<b>'</b>;

ALTER TABLE [Sample_Table_2] ADD Col_4 VARCHAR(20);

END TRY
BEGIN CATCH

关于tsql - 从 SQLCMD 执行 CREATE VIEW 和 ALTER VIEW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10466261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com