這是我的更新程序:
UPDATE tbl1
SET
-- other columns
tbl1.field_1 = CONVERT(datetime, CONVERT(varchar(10), carsAll.DateOfBirth, 104)),
tbl1.field_2 = DATEPART(YEAR, GETDATE()) - DATEPART(YEAR, tbl1.field_1),
-- other columns
FROM
[db1].[cars].[table_1] AS tbl1
INNER JOIN
[db2].[cars].[carsAll_test] AS carsAll ON tbl1.[TP_PK]=carsAll.[TP_PK]
第一次運行程式時,所有列都填充了資料,除了tbl1.field_2.
我第二次運行它也tbl1.field_2被填滿了。
如何在一次運行中更新所有列,為什么tbl1.field_1在程式開始之前設定時會發生這種情況tbl1.field_2?
我正在使用 SQL Server 2017 (v14)。
uj5u.com熱心網友回復:
為什么在程式以 tbl1.field_2 開始之前設定了 tbl1.field_1 時會發生這種情況
查詢右側的欄位 ( tbl1.field_1) 將參考其原始值(更新前),無論它們的順序如何。
簡單來說,更新的值tbl1.field_1只有在整個更新陳述句完成后才可用。所以,你不能在同一個更新陳述句中使用這一行
tbl1.field_2 = DATEPART(YEAR, GETDATE()) - DATEPART(YEAR, tbl1.field_1),
如何在一次運行中更新所有列
tbl1.field_1您可以直接參考而不是參考carsAll.DateOfBirth
UPDATE tbl1
SET
-- other columns
tbl1.field_1 = CONVERT(datetime, CONVERT(varchar(10), carsAll.DateOfBirth, 104)),
tbl1.field_2 = DATEPART(YEAR, GETDATE()) - DATEPART(YEAR, carsAll.DateOfBirth),
-- other columns
FROM
[db1].[cars].[table_1] AS tbl1
INNER JOIN
[db2].[cars].[carsAll_test] AS carsAll ON tbl1.[TP_PK]=carsAll.[TP_PK]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366507.html
標籤:sql sql-server
上一篇:正確連接查詢-SQL
