Я пишу хранимую процедуру с использованием динамического SQL.Сохраненная процедура с динамическим запросом
В моей процедуре я скажу около 10 таблиц похожих столбцов.
Например, если я считаю Designation
& Department
таблицы, Designation
таблица имеет следующие столбцы:
Designation, Code, EntryBy, EntryOn, ModifiedBy, ModifiedOn
и Department
таблица имеет следующие столбцы:
Department, Code, EntryBy, EntryOn, ModifiedBy, ModifiedOn
и точно так же у меня есть некоторые восемь других таблиц.
В моей хранимой процедуре мне необходимо обновить и вставить данные во все таблицы. Таким образом, вместо того, чтобы писать обновление & вставлять инструкции для каждой таблицы, я использую хранимую процедуру, которая принимает имя таблицы в качестве параметра и проверяет, существует ли строка в этой таблице.
Если эта строка присутствует, то эта запись будет обновлена, иначе запись будет вставлена в соответствующую таблицу.
ALTER PROC UpdateMasterItems
(
@MasterTypeTmp varchar(50),
@NameTmp varchar(50),
@CodeTmp varchar(10))
AS
BEGIN
DECLARE @CntTmp numeric(2,0)
EXEC('select count(*)' + @CntTmp + ' from ' + @MasterTypeTmp + ' where ' + @MasterTypeTmp + ' = ' + @NameTmp)
IF(@CntTmp > 1)
BEGIN
EXEC('UPDATE ' + @MasterTypeTmp + ' SET ' + 'Code = ' + @CodeTmp + ', ModifiedBy = CURRENT_USER, MOdifiedOn = CURRENT_TIMESTAMP WHERE' + @MasterTypeTmp + ' = ' + @NameTmp)
RETURN 10
END
ELSE
BEGIN
EXEC('INSERT INTO ' + @MasterTypeTmp + '(' + @MasterTypeTmp + ', Code, EntryBy, EntryOn, ModifiedBy, ModifiedOn) VALUES (' + @NameTmp + ',' + @CodeTmp + ',' + 'CURRENT_USER, CURRENT_TIMESTAMP, CURRENT_USER, CURRENT_TIMESTAMP)')
RETURN 11
END
END
где @MasterTypeTmp
это имя таблицы (может быть Department
/Designation
.....)
Я получаю сообщение об ошибке при выполнении процедуры:
Exec заявление:
EXEC UpdateMasterItems 'Designation', 'TestName', 'TestCode'
Заявления об ошибках:
Invalid column name 'TestName'.
Invalid column name 'TestCode'.
Но TestName
& TestCode
не являются имена столбцов. Это значения для столбцов. Пожалуйста, дайте мне знать, если мои динамические запросы неверны или где проблема!
Заранее спасибо
мауника
Спасибо за это. Все отмеченные пункты. Я попытался использовать IF EXISTS() вместо count. Но IF EXISTS не принимает динамический запрос. Это дает мне ошибку. – user2174615
Спасибо. Все отметили. Можно ли использовать динамический sql в IF EXISTS()? Я получаю ошибки, когда пытаюсь это сделать. – user2174615
Да, вы можете. [Проверьте этот пример скрипта] (http://sqlfiddle.com/#!3/ac7f7/7) – Kaf