当我编写以下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.
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语句脚本,在它上面抛出几行保护代码,我就完成了.
| 归档时间: |
|
| 查看次数: |
7669 次 |
| 最近记录: |