如果我想做一些相對複雜的事情 - 通常由存儲過程完成。是否有可能使用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'自動化這個。所以視圖應該=輸入表格+額外的一行 –