Vous pouvez essayer quelque chose comme ça (je suis juste deviner ce que les colonnes de votre table tbl_user
sont appelés, vous n'avez pas fourni cette information - donc vous aurez besoin d'adapter ce que nécessaire):
;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
Fondamentalement, je crée un CTE (Common Table expression) en fonction de votre table temporaire, et je sélectionner les valeurs qui y sont stockées sous forme de colonnes. Sur la base de ce CTE, je peux ensuite utiliser une instruction T-SQL UPDATE
pour mettre à jour la table tbl_Users
en fonction de ces valeurs temporaires.
Cela fonctionne dans SQL Server 2005 et plus récent (encore une fois: vous n'avez pas fourni cette information dans votre question)
Sinon, vous ne devez pas nécessairement une table temporaire ici, je pense. Vous pouvez utiliser le CTE directement « poisson » les attributs de la variable XML, puis les utiliser pour mettre à jour votre tbl_Users
tableau - quelque chose comme ceci:
;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
Encore une fois: adapter les noms de colonnes (et les types de les appels XQuery .value()
) en fonction des besoins - je suis juste deviner ici ....
Vous pouvez lire les paramètres XML à l'aide OPENXML Cela pourrait aider -http: //stackoverflow.com/questions/3244796/stored -procedure-passing-a-parameter-comme-xml-and-reading-the-data – Devasayal
Pouvez-vous ajouter la structure de table de 'tbl_user' avec quelques exemples de données et quel devrait être le résultat après la mise à jour? –
Votre XML ne va-t-il jamais avoir une seule entrée de type ''? Sinon, vous devrez trouver comment associer les différentes valeurs avec un '' donné ... –