Я пытаюсь создать хранимую процедуру, которая использует sp_executesql.Я долго и упорно здесь , но я не могу видеть, что я делаю неправильно в моем коде.Я новичок в хранимых процедурах / SQL Server функции в целом, поэтому я предполагаю, что я пропускаю что-то простое.Хранимая процедура alter происходит нормально, но когда я пытаюсь ее запустить, я получаю сообщение об ошибке.
В сообщении об ошибке.
Msg 1087, Level 15, State 2, Line 3
Must declare the table variable "@atableName"
Процедура выглядит следующим образом.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[sp_TEST]
@tableName varchar(50),
@tableIDField varchar(50),
@tableValueField varchar(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQLString nvarchar(500);
SET @SQLString = N'SELECT DISTINCT @aTableIDField FROM @atableName';
EXEC sp_executesql @SQLString,
N'@atableName varchar(50),
@atableIDField varchar(50),
@atableValueField varchar(50)',
@atableName = @tableName,
@atableIDField = @tableIDField,
@atableValueField = @tableValueField;
END
И я пытаюсь назвать это как-то так.
EXECUTE sp_TEST 'PERSON', 'PERSON.ID', 'PERSON.VALUE'
В этом примере не добавляется ничего особенного, но у меня есть большое количество представлений, имеющих похожий код.Если бы я мог заставить эту хранимую процедуру работать, я мог бы значительно сократить многократный код.
Спасибо за вашу помощь.
Редактировать: Я пытаюсь сделатьэто для облегчения обслуживания.У меня есть несколько представлений, которые в основном имеют одинаковый точный sql за исключением того, что имя таблицы отличается.Данные передаются на экземпляр сервера SQL для отчетности.Когда у меня есть таблица, содержащая несколько строк на идентификатор человека, каждая из которых содержит значение, я часто нуждаюсь в них в одной ячейке для пользователей.