Когда я хочу добавить столбец datetime во всю таблицу, я могу написать хранимую процедуру, которая принимает дату в качестве входных данных, а затем сохраняет ее в таблице - например, так:
ALTER PROCEDURE [dbo].[set_datettime]
(@importDate VARCHAR(100))
AS
BEGIN
UPDATE [dbo].[table1]
SET uploadDate = @importDate
END
Но когда я хочусделать таблицу динамической мне нужно использовать sp_executesql
. Поэтому я думаю, что я могу сделать это:
ALTER PROCEDURE [dbo].[set_datettime]
(@tableName VARCHAR(100), @importDate VARCHAR(100))
AS
BEGIN
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = 'UPDATE dbo.' + quotename(@tableName) + ' SET uploadDate = @importDate';
EXECUTE sp_executesql @Sql
END
, но теперь я получаю сообщение об ошибке:
Сообщение об ошибке: необходимо объявить скалярную переменную @ importDate
Несмотря на четкое объявление переменной. Даже если я пытаюсь явно объявить переменную снова, я получаю ошибку, что не могу объявить дубликаты переменных.
Другая вещь, которую я пытался сделать, была:
SET @Sql = 'UPDATE dbo.' + quotename(@tableName) + ' SET uploadDate = ' + @importDate;
Но это выдает ошибку
Неверное имя столбца 10-10-2019
Наконец я смог выполнить задачу (в некоторой степени), изменив значение на
SET @Sql = 'UPDATE dbo.' + quotename(@tableName) + ' SET uploadDate = GETDATE()';
НоВ этом решении я определяю дату в хранимой процедуре и не принимаю ее в качестве входных данных, что не является идеальным.
Как получить динамическое определение таблицы, при этом сохраняя динамическую переменную ввода даты?