你可以嘗試這樣的事情(我只是猜測在您tbl_user
表中的列叫什麼,你沒有提供的信息 - 所以你需要去適應,作爲需要):
;WITH UpdateCTE AS
(
SELECT
UserKey = (SELECT Value FROM #tbl WHERE Name = 'USER_KEY'),
UserName = (SELECT Value FROM #tbl WHERE Name = 'USER_NAME'),
UserID = (SELECT Value FROM #tbl WHERE Name = 'USER_ID'),
UserStatus = (SELECT Value FROM #tbl WHERE Name = 'USER_Status'),
UserGender = (SELECT Value FROM #tbl WHERE Name = 'USER_Gender')
FROM #tbl
)
UPDATE dbo.tbl_Users
SET UserName = cte.UserName,
UserID = cte.UserID,
Status = cte.UserStatus,
Gender = cte.UserGender
FROM dbo.Users u
INNER JOIN UpdateCTE cte ON u.UserKey = cte.UserKey
基本上,我創建了一個CTE(公共表表達式)根據您的臨時表中,我選擇了保存在它作爲列的值。基於該CTE,然後我可以使用常規T-SQL UPDATE
語句根據這些臨時值更新tbl_Users
表。
這將在SQL Server 2005 和新工作(再次:你沒有提供您的疑問,資訊)
或者,你不一定需要一個臨時表在這裏,我想。您可以使用CTE直接「撈出」從XML變量的屬性,然後用它們來更新您的tbl_Users
表 - 這樣的事情:
;WITH UpdateCTE AS
(
SELECT
UserKey = T.N.value('@USER_KEY', 'INT'),
UserName = T.N.value('@USER_NAME', 'VARCHAR(50)'),
UserID = T.N.value('@USER_ID', 'INT'),
UserStatus = T.N.value('@USER_STATUS', 'VARCHAR(50)'),
UserGender = T.N.value('@USER_GENDER', 'CHAR(1)')
FROM
@XML.nodes('/root/row') as T(N)
)
UPDATE dbo.tbl_Users
SET UserName = cte.UserName,
UserID = cte.UserID,
Status = cte.UserStatus,
Gender = cte.UserGender
FROM dbo.Users u
INNER JOIN UpdateCTE cte ON u.UserKey = cte.UserKey
還是那句話:適應列名(和類型中的XQuery .value()
話費)根據需要 - 我只是猜測這裏 ....
可以使用OPENXML 這可能有助於-http讀取XML參數://stackoverflow.com/questions/3244796/stored -procedure-passing-a-parameter-as-xml-and-reading-the-data – Devasayal
你可以在'tbl_user'的表格結構中添加一些示例數據以及更新後的結果嗎? –
您的XML是否只有一個''類型的條目?否則,您需要了解如何將各種值與給定的''關聯...... –