将表插入SQL Server视图

Sax*_*mmy 2 sql sql-server sql-server-2008

我已经做了很多研究,并试图弄清楚如何做到这一点,但建议的一切似乎并不适合我.我使用以下SQL创建一个表:

CREATE VIEW view_name AS SELECT * FROM table1_name
Run Code Online (Sandbox Code Playgroud)

当我这样做时,如果我对table1_name这些更改进行了更改,则会反映在视图中(如我所愿).但是,我后来创建了一个表,table2_name并希望以相同的方式将其添加到此视图中,这样,如果我向表中添加行,它们将反映在视图中.所以,我使用了类似的代码,(但是使用insert代替)

INSERT INTO view_name SELECT * FROM table2_name
Run Code Online (Sandbox Code Playgroud)

但是,现在当我对table2_name这些添加内容没有反映在视图中时.我是SQL的新手(三天前开始),所以我应该看到的任何想法或地方都会非常感激.

(注意:我正在使用SQL Server,我似乎并不认为这会产生很大的不同,但是如果它确实如此)

谢谢,SaxyTimmy

Aar*_*and 6

也许你打算做什么(假设列是相同的):

ALTER VIEW view_name
AS
    SELECT col1, col2 FROM table1_name
    UNION ALL
    SELECT col1, col2 FROM table2_name
Run Code Online (Sandbox Code Playgroud)

正如Joe指出的那样,你不会在视图中插入数据 - 它不会被持久化(除非它被索引,在这种情况下你也不会实际插入到视图中).

如果要更新新表的视图,可以执行以下操作.我假设您使用的是SQL Server 2005或更高版本 - 如果您的学校教您SQL Server 2000,那么就会感到羞耻.我还假设了其他一些事情......你的观点不包含一个尾随语句终止符(大约是我唯一一次主张将其删除)并且你之前没有评论中的各种废话CREATE VIEW命令.

CREATE PROCEDURE dbo.AddTableToView
    @view      SYSNAME,
    @new_table SYSNAME
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @sql NVARCHAR(MAX);

    SELECT @sql = [definition] FROM sys.sql_modules
        WHERE [object_id] = OBJECT_ID(@view);

    SELECT @sql = STUFF(@sql, CHARINDEX('CREATE VIEW', @sql), 6, 'ALTER')
        + 'UNION ALL
           SELECT col1, col2 FROM ' + @new_table;

    EXEC sp_executeSQL @sql;
END
GO
Run Code Online (Sandbox Code Playgroud)

但正如我在评论中所说,这真的不是你想要的方式,我怀疑你的教授会有同样的感受.

  • 我认为你仍然误解了一个观点的概念.视图中没有数据*IN*...它不是表的副本,它只是指向表的指针.或者你的意思是你不想每次都要重新创建视图定义?当您说"视图中的表格"时,我很难关注您是表示实际数据还是对表格的引用. (3认同)
  • 如果要向视图添加大量相同的表,则可能表明数据库设计存在问题. (2认同)
  • 那么你可以在sys.sql_modules中查找现有的定义并附加到它.但是你怎么防止多次添加相同的视图?你真的有这么多表格*有相同的列*这是你需要自动化的东西吗?您是否尝试在不实际使用分区的情况下自动执行某种分区方案? (2认同)
  • 不,每个用户的表绝对不是你应该离开的方式.也许你应该在项目到期之前问过你的问题.: - \ (2认同)