Передайте имя таблицы, используя параметр в хранимой процедуре SQL Server

Я хочу создать хранимую процедуру, которая будет обновлять таблицу. Процедура объединит две таблицы, и я хочу передать имя таблицы с помощью переменной (@tablename).

Эта ошибка генерируется:

Необходимо объявить табличную переменную "@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

person Stephen    schedule 13.10.2017    source источник
comment
Ознакомьтесь с динамическим SQL   -  person Jacob H    schedule 13.10.2017
comment
Обновите вопрос, чтобы указать, в какой базе данных вы находитесь. Почти уверен, что вы будете вынуждены использовать динамический sql здесь... хотя я бы посоветовал вам спросить, почему вы делаете это таким образом, и есть ли лучший способ добиться того, чего вы хотите здесь.   -  person Twelfth    schedule 13.10.2017
comment
В дополнение к исправлениям, приведенным ниже, у вас есть некоторые другие проблемы. У вас есть запятая после первой строки в обновлении, но вы обновляете только один столбец. И если у вас есть сопоставление с учетом регистра, это не удастся, потому что TableName ‹› tablename   -  person Sean Lange    schedule 13.10.2017


Ответы (1)


Вы можете использовать этот скрипт:

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
person Serkan Arslan    schedule 13.10.2017