0

Je souhaite créer une procédure stockée qui mettra à jour une table. La procédure joindra deux tables et je veux passer le nom de la table en utilisant une variable (@tablename).Passage du nom de la table à l'aide d'un paramètre dans la procédure stockée SQL Server

Cette erreur est générée:

doit déclarer la variable de table "@tablename".

Mon code:

Create Procedure dbo.SpUpdate (@TableName varchar(50)) 
as 
begin 
    set @tablename='Customer' 

    Update a 
    Set AgentNumber = '5', 
    From dbo.CustomerList a 
    join @tablename b on a.customerid = b.customerid 
end 
+0

Check out question de mise à jour dynamique SQL –

+0

pour inclure ce que la base de données que vous êtes. Assez sûr que vous serez obligé de dynamique sql ici ... mais je vous suggère de demander pourquoi vous le faites de cette façon et s'il y a une meilleure façon d'atteindre ce que vous voulez ici. – Twelfth

+0

En plus des correctifs ci-dessous, vous avez d'autres problèmes ici. Vous avez une virgule après la première ligne de la mise à jour mais vous ne mettez à jour qu'une seule colonne. Et si vous avez un classement sensible à la casse, cela échouera car TableName <> nom_table –

Répondre

2

Vous pouvez utiliser ce script:

Create Procedure dbo.SpUpdate (@TableName varchar(50)) 
as 
begin 

DECLARE @SqlText NVARCHAR(MAX) 

SET @SqlText = 
'Update a 
Set AgentNumber=''5'', 
From dbo.CustomerList a 
join ' + QUOTENAME(@tablename) + ' b 
on a.customerid= b.customerid' 

EXEC sp_executesql @SqlText 

end