ALTER VIEW必须是批处理中唯一的语句

Ray*_*Ray 1 t-sql sql-server

当我编写以下ALTER VIEW语句时,我在SQL Server中收到此错误消息.ALTER VIEW行以红色下划线.

IF EXISTS(SELECT * FROM sys.views WHERE name = 'SigHierarchyView')
ALTER VIEW [dbo].[SigHierarchyView] WITH SCHEMABINDING AS
(
SELECT    [Sig].[Id]
            ,[Sig].[UniqueId]
            ,[Sig].[TenantId] AS [ParentTenantId]
            ,[Sig].[Code_FR]
            ,[Sig].[Code_EN]
            ,[Sig].[DecodedText_FR]
            ,[Sig].[DecodedText_EN]
            ,[Sig].[DecodedText_ES]
            ,[Sig].[DecodedText_IT]
            ,[Sig].[DecodedText_VI]
            ,[Sig].[DecodedText_CH]
            ,[Sig].[Timestamp]
            ,[Sig].[Deleted]
            ,[Sig].[CreationDate]
            ,[Sig].[CreationUserUniqueId]
            ,[Sig].[ModificationDate]
            ,[Sig].[ModificationUserUniqueId]
            ,TenantHierarchy.[LeafTenantId] AS [TenantId]
        FROM dbo.[Sig]
        INNER JOIN dbo.TenantHierarchy ON  [Sig].TenantId = TenantHierarchy.ParentTenantId    
        WHERE  TenantHierarchy.Level = (
                    SELECT MIN(TenantHierachieIn.Level) 
                    FROM dbo.TenantHierarchy TenantHierachieIn               
                    INNER JOIN  dbo.[Sig] as SigIn  
                                ON SigIn.TenantId = TenantHierachieIn.ParentTenantId                            
                                AND SigIn.UniqueId = [Sig].UniqueId
                    WHERE TenantHierachieIn.[LeafTenantId] = TenantHierarchy.[LeafTenantId]
        )
)
Run Code Online (Sandbox Code Playgroud)

我尝试了BEGIN和END,但这没有帮助.我正在使用SQL Server 2012.

Ben*_*hul 5

SQL Server中的批处理由"GO"关键字分隔.由于您的脚本中没有任何内容,因此所有内容都在一个批处理中.而且,正如您已经发现的那样,alter view需要自己的批次.我喜欢用来防止这种情况的一个成语如下:

if object_id('[dbo].[myView]') is not null --object exists
   set noexec on;
go
-- this will only get run if the object doesn't exist
create view [dbo].[myView]
as
   select 'stub' as message
go
set noexec off;
go
alter view [dbo].[myView]
as

-- actual view definition here
Run Code Online (Sandbox Code Playgroud)

这样,我可以使用SSMS中的脚本编写一个alter view语句脚本,在它上面抛出几行保护代码,我就完成了.