2013-04-08 4 views
1
CREATE TABLE #TempProducts (
    Id uniqueidentifier, 
    ManufacturerId uniqueidentifier, 
    Number varchar(50), 
    PresentId uniqueidentifier null) 

Comment mettre à jour le champ PresentId? J'ai différentes erreurs dans ceci:Comment mettre à jour #temptable

1) Il y a déjà un objet nommé '#TempProducts' dans la base de données.

UPDATE #TempProducts 
SET #TempProducts.PresentId = p.Id 
FROM #TempProducts JOIN Products p ON (#TempProducts.ManufacturerId = p.ManufacturerId AND #TempProducts.Number = p.Number) 
WHERE #TempProducts.Id <> p.Id 

2) L'identificateur en plusieurs parties "t.PresentId" n'a pas pu être lié.

UPDATE #TempProducts 
SET t.PresentId = p.Id 
FROM #TempProducts t JOIN Products p ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number) 
WHERE t.Id <> p.Id 

Répondre

2

l'erreur Deuxième s'il vous plaît essayer:

UPDATE t 
SET t.PresentId = p.Id 
FROM #TempProducts t JOIN Products p ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number) 
WHERE t.Id <> p.Id 
+0

pas mon downvote, mais comment est-ce différent de l'exemple 1? utiliser tablename au lieu d'alias est très bien. –

+1

@JW :) c'est bon. Vous obtenez 'L'identificateur en plusieurs parties" t.PresentId "ne peut pas être lié.' pour la deuxième requête. Alors que j'ai essayé avec elias 't', ça a marché (au moins l'erreur est partie). – TechDo

+1

ouais tu as raison. besoin de dormir maintenant ~ ~ –

1

Pour le problème 1: (Avant l'CREATE TABLE syntaxe)

if object_id(tempdb..#TempProducts) is not null 
begin 
    drop table #TempProducts 
end 

Et pour le problème 2 Je pense @techdo est correct.

UPDATE t 
SET t.PresentId = p.Id 
FROM #TempProducts t JOIN Products p 
ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number) 
WHERE t.Id <> p.Id 
1
UPDATE t 
SET t.PresentId = p.Id 
FROM #TempProducts t JOIN Products p ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number) 
WHERE t.Id <> p.Id 

Ce serait pour fixer une deuxième erreur (UPDATE t au lieu de MISE À JOUR #TempProducts). Cependant, il n'y a aucun moyen que la première requête produise une erreur mentionnée.

Je suppose que vous exécutez à nouveau votre requête CREATE TABLE qui génère une erreur car la table temporaire existe déjà.

Vous devez utiliser un contrôle comme celui-ci lors de la création des tables temporaires:

IF (OBJECT_ID('tempdb..#TempProducts') IS NOT NULL) DROP TABLE #TempProducts 
CREATE TABLE #TempProducts (
    Id uniqueidentifier, 
    ManufacturerId uniqueidentifier, 
    Number varchar(50), 
    PresentId uniqueidentifier null)