Ⅰ sql在視圖中如何插入新的數據
對於 單表的視圖, 插入/修改 數據是沒有問題的。 (只要你不做特別的設置)
對於多表的視圖, 操作的時候,會存在一定的問題。
下面是一個例子:
1> CREATE VIEW v_main_sub AS
2> SELECT
3> test_main.id AS main_id,
4> test_main.value AS main_value,
5> test_sub.id AS sub_id,
6> test_sub.value AS sub_value
7> FROM
8> test_main, test_sub
9> WHERE
10> test_main.id = test_sub.main_id;
11> go
1> SELECT * FROM v_main_sub;
2> go
main_id main_value sub_id sub_value
----------- ---------- ----------- ----------
1 ONE 1 ONEONE
2 TWO 2 TWOTWO
(2 行受影響)
1> UPDATE v_main_sub
2> SET main_value='ONX'
3> WHERE main_id = 1;
4> go
(1 行受影響)
1> UPDATE v_main_sub
2> SET sub_value='ONXONX'
3> WHERE main_id = 1;
4> go
(1 行受影響)
1> DELETE FROM v_main_sub WHERE main_id = 1;
2> go
消息 4405,級別 16,狀態 1,伺服器 GMJ-PCSQLEXPRESS,第 1 行
視圖或函數 'v_main_sub' 不可更新,因為修改會影響多個基表。
-- 這個觸發器, 只測試輸出, 不刪除數據。
1> CREATE TRIGGER v_main_sub_trigger
2> ON v_main_sub
3> INSTEAD OF DELETE
4> AS
5> DECLARE
6> @main_id INT,
7> @sub_id INT;
8> BEGIN
9> SELECT @main_id=main_id, @sub_id=sub_id FROM deleted;
10>
11>
12> PRINT(@main_id);
13> PRINT(@sub_id);
14> END;
15> go
1> DELETE FROM v_main_sub WHERE main_id = 1;
2> go
1
1
(1 行受影響)
1> DELETE FROM v_main_sub WHERE sub_id = 1;
2> go
1
1
(1 行受影響)
對於多表關聯的視圖, 刪除的時候,需要人為的去判斷
例如當 主表 和 子表,都只有一條記錄的情況下。
無法判斷 本次刪除, 是要刪除掉一個子表的記錄,留下主表的。
還是 主表 子表的數據,一同刪除。
Ⅱ 簡述SQL中對視圖進行插入操作的視圖中來引用的欄位,必須具備的條件
視圖中的數據只能來自一個表
視圖中必須包含來源表的關鍵欄位
Ⅲ SqlServer往視圖中插入數據的問題!!
視圖是由多個表,根據某種關系連接在一起的記錄集合,如果要插入數據,應該根據邏輯關系和主外鍵關系,對表插入數據。
比如說 學校表,班級表,學生表,其關系假設為
學校表---->班級表---->學生表 從前到後為一對多的關系,即前一個是後一個的主表,後一個是前一個的從表
當建立學生視圖,此時要插入學生記錄,則直接插入學生表,要插入班級記錄,則直接插入到班級表,前提是,主表必須先有記錄,從表才能插入
Ⅳ 如何在sql server資料庫的視圖上插入新的數據
視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖並不在資料庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,並且在引用視圖時動態生成。
當建立視圖時使用的表中的數據發生了改變後,視圖中的數據也會發生相應的改變,視圖本身是不能執行添加,刪除,修改的!
如果要插入新數據的話,建議使用觸發器,在視圖相對應的各表中插入數據。視圖中自然更新。
Ⅳ sql在視圖中如何插入新的數據
對於 單表的視圖, 插入/修改 數據是沒有問題的。 (只要你不做特別的設置)x0dx0ax0dx0a對於多表的視圖, 操作的時候,會存在一定的問題。x0dx0ax0dx0a下面是一個例子:x0dx0ax0dx0a1> CREATE VIEW v_main_sub ASx0dx0a2> SELECTx0dx0a3> test_main.id AS main_id,x0dx0a4> test_main.value AS main_value,x0dx0a5> test_sub.id AS sub_id,x0dx0a6> test_sub.value AS sub_valuex0dx0a7> FROMx0dx0a8> test_main, test_subx0dx0a9> WHEREx0dx0a10> test_main.id = test_sub.main_id;x0dx0a11> gox0dx0ax0dx0a1> SELECT * FROM v_main_sub;x0dx0a2> gox0dx0amain_id main_value sub_id sub_valuex0dx0a----------- ---------- ----------- ----------x0dx0a 1 ONE 1 ONEONEx0dx0a 2 TWO 2 TWOTWOx0dx0ax0dx0a(2 行受影響)x0dx0ax0dx0a1> UPDATE v_main_subx0dx0a2> SET main_value='ONX'x0dx0a3> WHERE main_id = 1;x0dx0a4> gox0dx0ax0dx0a(1 行受影響)x0dx0ax0dx0a1> UPDATE v_main_subx0dx0a2> SET sub_value='ONXONX'x0dx0a3> WHERE main_id = 1;x0dx0a4> gox0dx0ax0dx0a(1 行受影響)x0dx0ax0dx0a1> DELETE FROM v_main_sub WHERE main_id = 1;x0dx0a2> gox0dx0a消息 4405,級別 16,狀態 1,伺服器 GMJ-PC\SQLEXPRESS,第 1 行x0dx0a視圖或函數 'v_main_sub' 不可更新,因為修改會影響多個基表。x0dx0ax0dx0a-- 這個觸發器, 只測試輸出, 不刪除數據。x0dx0a1> CREATE TRIGGER v_main_sub_triggerx0dx0a2> ON v_main_subx0dx0a3> INSTEAD OF DELETEx0dx0a4> ASx0dx0a5> DECLAREx0dx0a6> @main_id INT,x0dx0a7> @sub_id INT;x0dx0a8> BEGINx0dx0a9> SELECT @main_id=main_id, @sub_id=sub_id FROM deleted;x0dx0a10>x0dx0a11>x0dx0a12> PRINT(@main_id);x0dx0a13> PRINT(@sub_id);x0dx0a14> END;x0dx0a15> gox0dx0ax0dx0a1> DELETE FROM v_main_sub WHERE main_id = 1;x0dx0a2> gox0dx0a1x0dx0a1x0dx0ax0dx0a(1 行受影響)x0dx0a1> DELETE FROM v_main_sub WHERE sub_id = 1;x0dx0a2> gox0dx0a1x0dx0a1x0dx0ax0dx0a(1 行受影響)x0dx0ax0dx0a對於多表關聯的視圖, 刪除的時候,需要人為的去判斷x0dx0a例如當 主表 和 子表,都只有一條記錄的情況下。x0dx0a無法判斷 本次刪除, 是要刪除掉一個子表的記錄,留下主表的。x0dx0a還是 主表 子表的數據,一同刪除。
Ⅵ 創建一個視圖 插入相關數據 SQL
創建數據表
create
table
table_name
(
[column_name]
data_type
constraint,
[column2_name]
data_type
consraint,
[column3_name]
data_type
constraint
)
插入數據
insert
into
table_name([column_name],[column_name1],[column_name2])
values
('something','something','something')
還有很多的東西
比如說修改、刪除表;添加、修改、刪除約束;添加、修改、刪除列等。都是基礎的東西
不是很難
Ⅶ sql server中如何添加視圖
視圖-》新建新視圖,選擇表,關聯成視圖;
或者直接用sql語句生成視圖;
********
找到視圖 (View) 右鍵肯定有新建視圖的
用語句就是你所要數據的查詢語句,直接放到一個新建視圖的Sql語句部分,生成就ok了!
Ⅷ sql視圖插入數據
如果視圖僅包含2列,那麼語法沒有錯誤。
出錯的原因可能是視圖是基表所有列中的一部分而基表中其它列不允許為空,或者基表是多個表join,多個表作為基表的視圖不能進行insert。
如果視圖的列多於2列,你的語法就是錯誤的,必須在表名後指定列名。
INSERT INTO V_SALERS(列1,列2)
VALUES('S6','聯想集團')