分析如下
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;
2、【創建源表1】:
CREATE TABLE #SourceTable1(
Id UNIQUEIDENTIFIER,
SCode VARCHAR(50),
SName NVARCHAR(100),
Remark NVARCHAR(500)
)
3、【創建源表2】:
CREATE TABLE #SourceTable2(
Id UNIQUEIDENTIFIER,
SCode VARCHAR(50),
SAttr1 VARCHAR(100),
SAttr2 VARCHAR(100)
)
4、【創建需要更新數據的表】:
CREATE TABLE #UpdateTable(
Id UNIQUEIDENTIFIER,
SCode VARCHAR(50),
SName NVARCHAR(100),
SAttr1 VARCHAR(100),
SAttr2 VARCHAR(100)
)
5、【插入源表1測試數據】:
INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode1', '更新名字1', '更新測試備注1');
INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode2', '更新名字2', '更新測試備注2');
INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode3', '更新名字3', '更新測試備注3');
-- 查詢插入的結果
SELECT * FROM #SourceTable1
6、【插入源表2測試數據】:
INSERT INTO #SourceTable2(Id, SCode, SAttr1, SAttr2) VALUES(NEWID(), 'SCode1', 'SCode1-更新屬性1', 'SCode1-更新屬性2');
INSERT INTO #SourceTable2(Id, SCode, SAttr1, SAttr2) VALUES(NEWID(), 'SCode2', 'SCode2-更新屬性1', 'SCode2-更新屬性2');
-- 查詢插入的結果
SELECT * FROM #SourceTable2
7、【插入#UpdateTable的原始記錄】:
INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode1', '名字1', 'SCode1-屬性1', 'SCode1-屬性1');
INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode2', '名字2', 'SCode2-屬性2', 'SCode2-屬性2');
INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode3', '名字3', 'SCode3-屬性3', 'SCode3-屬性3');
-- 查詢插入的結果
SELECT * FROM #UpdateTable
8、【使用聯合查詢,將#UpdateTable、源表1、2中相同SCode的行字段更新到表#UpdateTable】:
UPDATE ut
SET ut.SName = sc1.SName,
ut.SAttr1 = sc2.SAttr1,
ut.SAttr2 = sc2.SAttr2
FROM #UpdateTable ut, #SourceTable1 sc1, #SourceTable2 sc2
WHERE ut.SCode = sc1.SCode
AND ut.SCode = sc2.SCode
-- 查詢插入的結果
SELECT * FROM #UpdateTable
擴展資料
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() - 格式化某個字段的顯示方式
參考資料:百度百科?sql的相關函數
