2017-10-13 317 views
0

我想創建一個將更新表的存儲過程。該過程將連接兩個表,我想使用變量傳遞表名(@tablename)。產生在SQL Server存儲過程中使用參數傳遞表名

此錯誤:

必須聲明表變量 「@tablename」。

我的代碼:

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

退房動態SQL –

+0

更新問題,包括你是什麼數據庫。很確定你會被迫在這裏使用動態sql ...雖然我建議你問你爲什麼這樣做,如果有更好的方法來實現你想要的東西。 – Twelfth

+0

除了下面的修復程序,您還有其他一些問題。在更新的第一行後面有逗號,但您只更新單個列。如果你有一個區分大小寫的排序規則,這將失敗,因爲TableName <> tablename –

回答

2

你可以使用這個腳本:

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 
相關問題