1. 在sql裡面如何實現關聯表數據的更新
1.建個觸發器
2.建立個物化試圖(速度快)
CREATE MATERIALIZED VIEW LOG ON name--建立物化視圖日誌保存在特定的表空間
tablespace users; --指定表空間
drop materialized view name;
create materialized view name--創建物化試圖
refresh fast
on commit --在提交後立即刷新
as
select
A.*
from tablename A
2. SQL Server資料庫多表關聯如何更新
一條Update更新語句是不能更新多張表的,除非使用觸發器隱含更新。而表的更新操作中,在很多情況下需要在表達式中引用要更新的表以外的數據。我們先來討論根據其他表數據更新你要更新的表
一、MS SQL Server 多表關聯更新
sql server提供了update的from 子句,可以將要更新的表與其它的數據源連接起來。雖然只能對一個表進行更新,但是通過將要更新的表與其它的數據源連接起來,就可以在update的表達式 中引用要更新的表以外的其它數據。
一般形式:
update A SET 欄位1=B表欄位表達式, 欄位2=B表欄位表達式 from B WHERE 邏輯表達式
例如:
UPDATE dbo.Table2
SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB
FROM dbo.Table2
INNER JOIN dbo.Table1
ON (dbo.Table2.ColA = dbo.Table1.ColA);
實際更新的操作是在要更新的表上進行的,而不是在from子句所形成的新的結果集上進行的
3. update sql 兩個關聯的表
一、當用一個表中的數據來更新另一個表中的數據,T-SQL提供多種寫法(下面列出了二種),但建議用第一種寫法,雖然傳統,但結構清晰。
並且要注意,當用一個表中的數據來更新另一個表中的數據時,二個表一定要有關聯!
1.
update t1
set t1.c2 = t2.c2
fro m t2
where t1.c1 = t2.c1
2.
Update t1
set t1.c2 = t2.c2
fro m t1 inner join t2
on t1.c1 = t2.c1
二、FROM 子句中指定的表的別名不能作為 SET column_name 子句中被修改欄位的限定符使用。
例如,下面的內容無效:
UPDATE titles
SET t.ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
若要使上例合法,請從列名中刪除別名 t 或使用本身的表名。
1.
UPDATE titles
SET ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
2.
UPDATE titles
SET titles.ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
4. SQL用觸發器實現 2個表 數據關聯,插入更新和刪除
建議將insert ,update 和Delete 單獨創建觸發器
觸發器中只有inserted ,deleted
insert 時inserted有值
update時,inserted和deleted都有值,deleted是修改前的值,inserted是修改後的
delete時,只有deleted有值
5. SQLSERVER 多表關聯如何更新
update 表C
set 表C.c3=表B.b3
from 表C
where 表C.c1=表A.a2 and 表C.c2=表B.b2
您說的還沒搞明白,從語法上講應該是這樣的,不知道行不行,只做過2個表之間關聯更新的,您這個要3個表,而且B表和 C表的關聯有沒有呢?
6. sql兩個表之間內容更新問題
sql兩個表之間內容更新問題
當用一個表中的數據來更新另一個表中的數據,T-SQL提供多種寫法(下面列出了二種),但建議用第一種寫法,雖然傳統,但結構清晰。
並且要注意,當用一個表中的數據來更新另一個表中的數據時,二個表一定要有關聯!
7. sql 幾張表互相關聯 更改一張資料庫信息 相應的更新相關聯的數據
oracle下:
oracle只有級聯刪除,沒有級聯更新(其實是有的,只是沒有on update cascade),所以要實現級聯更新有兩種方法:
一、在約束中定義延遲更新:alter table child_table
add constraint fk_child_parent
foreign key (id)
references parent_table (id)
initially deferred deferrable;
-- initially deferred deferrable; 這是延遲oracle的一致性檢查,通過這個我們可以分別更新主表和子表,然後再提交,這樣就能驗證通過了,有點麻煩,呵呵,還是用觸發器吧
二、通過觸發器實現:
CREATE OR REPLACE TRIGGER ID_TRG AFTER UPDATE ON Section FOR EACH ROW
BEGIN
UPDATE Employee SET 部門=:NEW.部門WHERE 部門=:OLD.部門;
END;
8. sql server 如何同時更新兩張有關系的表
可以使用事務,但是只有當兩張表都被更新了才會執行成功,否則事務回滾.
例如:
begin tran --開始執行事務
update bb set moneys=moneys-@momeys where ID=@fromID -執行的第一個操作,轉賬出錢,減去轉出的金額
update bb set moneys=moneys+@momeys where ID=@toID --執行第二個操作,接受轉賬的金額,增加
if @@error<>0 --判斷如果兩條語句有任何一條出現錯誤
begin rollback tran –開始執行事務的回滾,恢復的轉賬開始之前狀態
return 0
end
go
9. 關於SQL UPDATE關聯更新
分析如下
1、【如果存在測試臨時表,則先刪除,便於重復執行SQL】:
IF OBJECT_ID('tempdb..#SourceTable1') IS NOT NULL DROP TABLE #SourceTable1;
IF OBJECT_ID('tempdb..#SourceTable2') IS NOT NULL DROP TABLE #SourceTable2;
IF OBJECT_ID('tempdb..#UpdateTable') IS NOT NULL DROP TABLE #UpdateTable;
(9)sql兩表關聯更新擴展閱讀
SQL Aggregate 函數
SQL Aggregate 函數計算從列中取得的值,返回一個單一的值。
有用的 Aggregate 函數:
1、AVG() - 返回平均值
2、COUNT() - 返回行數
3、FIRST() - 返回第一個記錄的值
4、LAST() - 返回最後一個記錄的值
5、MAX() - 返回最大值
6、MIN() - 返回最小值
7、SUM() - 返回總和
SQL Scalar 函數
SQL Scalar 函數基於輸入值,返回一個單一的值。
有用的 Scalar 函數:
1、UCASE() - 將某個欄位轉換為大寫
2、LCASE() - 將某個欄位轉換為小寫
3、MID() - 從某個文本欄位提取字元
4、LEN() - 返回某個文本欄位的長度
5、ROUND() - 對某個數值欄位進行指定小數位數的四捨五入
6、NOW() - 返回當前的系統日期和時間
7、FORMAT() - 格式化某個欄位的顯示方式