【问题标题】:How to add new column in existing View in SQL-Server 2014 using Alter如何使用 Alter 在 SQL-Server 2014 的现有视图中添加新列
【发布时间】:2017-01-24 21:45:26
【问题描述】:

我创建了一个基于另一个视图和一个表的视图。我想添加 varchar 类型的新列。我确实喜欢下面,但是出现语法错误? 我是 SQL 新手,所以看不懂

ALTER VIEW [dbo].[MyView]
ADD New_Col varchar(10) null 
GO

【问题讨论】:

  • 错误信息是什么?帮助我们帮助您。
  • 不确定基于另一个视图创建视图是什么意思,但如果视图是嵌套的,则存在性能问题。嵌套视图看起来很合乎逻辑,但实际上它们很糟糕。 simple-talk.com/sql/performance/…

标签: sql sql-server view alter


【解决方案1】:

您必须重新编写整个视图,然后添加或省略您想要更改的内容

例如,您现在的视图是:

create view myView as
  select field1
  from table1

现在你想添加一个名为 New_Col 的字段而不是你写这个:

alter view myView as
  select field1,
         New_Col
  from table1

【讨论】:

  • 我们不能写一个脚本来为数据库中的所有视图添加一列吗?
【解决方案2】:

您不能像表格一样更改视图。您必须将视图编写为 Alter,然后更改生成视图的 select 语句。

【讨论】:

    【解决方案3】:

    您不能使用 ALTER VIEW 语句更改视图的 SELECT 语句。 相反,您必须删除并重新创建视图。

    【讨论】:

    • 不需要删除视图,您可以使用alter view,但不像使用表格那样。看我的回答
    【解决方案4】:

    你应该删除这个视图然后重新创建它

    DROP VIEW view_name;
    CREATe VIEW view_name AS
    SELECT column1, column2, ...
    FROM table_name
    WHERE condition;
    

    【讨论】:

    • 你可以试试这个,但只是发现它不起作用。您不能像使用表格那样更改视图。
    • 是的,你是在搜索之后我发现了这个,但是当我搜索时,我发现了从 w3 学校到update view的查询
    • 关键字“或”附近的语法不正确。 W3 schools 并不是一个真正值得信赖的寻找 sql server 语法的地方
    • hmm,我想了很多,除了drop view没有找到解决方案然后重新创建它
    • 简单地做ALTER VIEW 怎么样?无需丢弃它。你检查过这个问题的答案吗?
    【解决方案5】:
    if not exists(select * from sys.columns where (name='columnToBeAdd') and object_id=object_id('YourViewName'))
    begin
    Declare @ViewDefinition varchar(max) 
    select @ViewDefinition=definition from sys.objects o join sys.sql_modules m on m.object_id=o.object_id
    where o.object_id=object_id('YourViewName') 
    and o.type ='V'
    select 
    @ViewDefinition=REPLACE( replace(@ViewDefinition,'CREATE ','Alter '),' Create ' ,' Alter ' ) 
    Select @ViewDefinition=REPLACE( @ViewDefinition, 'From ',', YourTableName.columnToBeAdd + CHAR(13) +  ' From ' )
    
    exec( @ViewDefinition)
    end
    

    【讨论】:

    • 你可以使用内置格式使其更具可读性吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2011-06-11
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多