如果我想做一些相对复杂的事情 - 通常由存储过程完成。是否有可能使用VIEW
自动生成?使用INSERT内部的INSERT定义:CREATE VIEW AS INSERT INTO
我的具体情况:
我想输出表=输入表A +的某些行输入表B.在一个存储过程,我可以表A的第一个副本,然后INSERT INTO
它,但它不是允许在视图中。
简化的例子:
输入表是[test_album]
,并输出表=输入表+歌手王子。
--create test data
IF OBJECT_ID('[dbo].[test_album]', 'U') IS NOT NULL
DROP TABLE [dbo].[test_album]
CREATE TABLE [test_album] (
id int not null identity(1, 1) primary key,
singer VARCHAR(50) NULL,
album_title VARCHAR(100) NULL
)
INSERT INTO [test_album] (singer, album_title)
VALUES ('Adale', '19'),
('Michael Jaskson', 'Thriller')
--this can be executed as sql code or in stored proc
SELECT *
INTO [result_table]
FROM [test_album]
INSERT INTO [result_table] ([singer])
VALUES ('Prince')
select *
from [result_table]
--id singer album_title
--1 Adale 19
--2 Michael Jaskson Thriller
--3 Prince NULL
----as expected
但我可以在视图内做到这一点INSERT INTO
。
真实案例:
额外的歌手都在表[extra_singers]
[test_album]可能有很多其他的列(或模式可能会改变),所以它是理想的不要输入所有列代码中的名称。
--create test data
IF OBJECT_ID('[dbo].[test_album]', 'U') IS NOT NULL
DROP TABLE [dbo].[test_album]
IF OBJECT_ID('[dbo].[extra_singers]', 'U') IS NOT NULL
DROP TABLE [dbo].[extra_singers]
IF OBJECT_ID('[dbo].[result_table]', 'U') IS NOT NULL
DROP TABLE [dbo].[result_table]
CREATE TABLE [test_album] (
id int not null identity(1, 1) primary key,
singer VARCHAR(50) NULL,
album_title VARCHAR(100) NULL,
many_other_columns VARCHAR(100) NULL
)
INSERT INTO [test_album] (singer, album_title)
VALUES ('Adale', '19'),
('Michael Jaskson', 'Thriller')
CREATE TABLE [extra_singers] (
[id] int not null identity(1, 1) primary key,
[name] VARCHAR(50) NULL)
INSERT INTO [extra_singers] ([name])
VALUES ('Prince'),
('Taylor Swift')
--append [extra_singers] to [test_album]
--this can be executed as sql code or in stored proc
SELECT *
INTO [result_table]
FROM [test_album]
INSERT INTO [result_table] ([singer])
SELECT [name]
FROM [extra_singers]
是否有替代(这是自动的)? 任何帮助的赞赏。谢谢U-
部分解决我能想到的:
create view test_view as
select *
from [test_album]
union all
select 3 as id,
'Prince' as singer,
NULL as album_title
,但你必须知道在[test_album]
的所有列名,你不能让列[ID]做汽车 - 增量
这没有任何意义。你能澄清吗? – SqlZim
视图意味着显示底层数据。插入并不适合这一点。如果您不想直接插入数据,存储过程将更适合您正在尝试执行的操作。 – indiri
@SqlZim我需要在每次使用它时向表中添加一行。我试图用'VIEW'自动化这个。所以视图应该=输入表格+额外的一行 –