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
也许你打算做什么(假设列是相同的):
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)
但正如我在评论中所说,这真的不是你想要的方式,我怀疑你的教授会有同样的感受.
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |