Построить хранимую процедуру, которая вставляет данные в полученную таблицу - PullRequest
0 голосов
/ 26 октября 2018

Я построил процедуру, которая получает параметр с именем таблицы и вставляет в эту таблицу новые данные.

CREATE PROCEDURE sp_Ins 
     @tabela NVARCHAR(80)
AS
     INSERT INTO @tabela (CustomerID, CustomerPW) 
     VALUES (1, '123')
GO

CREATE PROCEDURE SP1 
     @tabela NVARCHAR(80)
AS
     EXEC sp_Ins @tabela
GO

EXEC SP1 'CustomerPW'

Но я получаю это сообщение:

Долженобъявить табличную переменную @ tabela

Как я могу объявить полученный параметр для распознавания параметра как таблицы?

1 Ответ

0 голосов
/ 26 октября 2018

Извините, вам нужно использовать динамический SQL.Вы не можете вставить в строку:

CREATE PROCEDURE sp_Ins (@tabela nvarchar(80))
AS
BEGIN
    declare @sql nvarchar(max) = '
INSERT INTO [t](CustomerID, CustomerPW)
    VALUES (1, ''123'')
;
    set @sql = replace(@sql, '[t]', QUOTENAME(@tablea));

    exec sp_executesql @sql;
END;

Примечание. Возможно, вы не захотите quotename(), если tablea может использовать именование из нескольких частей.

...