您可以尝试这样的事情(我只是在猜测您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-SQLUPDATE
语句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()
调用的类型)——我只是在这里猜测......