У нас есть возможность выполнять хранимые проки со среднего уровня. По сути, в таблице базы данных с именем «SQLJobStep» у нас есть - среди прочего - столбец varchar (300) с именем «StoredProcedure», который содержит что-то вроде этого:
usp_SendReminderEmails @Debug=0, @LoginID
Через промежуточный уровень пользователь нажимает на ссылку, чтобы запустить процедуру по своему выбору. В серверной части происходит то, что proc («usp_SQLJobsActionGet») ищет правильное значение в столбце «SQLJobStep.StoredProcedure» и выполняет указанное выше значение.
Это часть кода из "usp_SQLJobsActionGet", которая выполняет указанное выше значение:
DECLARE @StepId int
DECLARE @LoginID varchar(12)
DECLARE @StoredProcedure varchar(300)
SET @StepId = 74
SET @LoginID = 'Yoav'
SELECT @StoredProcedure = SJS.StoredProcedure
FROM SQLJobStep AS SJS
WHERE SJS.StepId = @StepId
SET @StoredProcedure = ISNULL(@StoredProcedure, '')
IF CHARINDEX('@LoginID', @StoredProcedure) > 0
BEGIN
SET @LoginID = ISNULL(@LoginID, 'UNKNOWN')
SET @StoredProcedure = REPLACE(@StoredProcedure, '@LoginID', '@LoginID = ''' + @LoginID + '''')
END
IF @StoredProcedure != ''
BEGIN
EXEC(@StoredProcedure)
END
Довольно простые вещи ....
Приведенный выше код преобразует исходное значение в (и затем выполняет):
usp_SendReminderEmails @Debug=0, @LoginID = 'Yoav'
Вот вопрос:
При выполнении значения "usp_SendReminderEmails @ Debug = 0, @LoginID = 'Yoav'" ничего не происходит. Ошибка не возвращается на средний уровень. Но я знаю, что значение извлекается из таблицы SQLJobStep, потому что у нас есть другие значения хранимых процедур, которые извлекаются и работают нормально. (Обратите внимание, что другие значения имеют только параметр @LoginID, в то время как он также имеет @ Debug = 0.)
В то же время, если я запускаю приведенный выше код (как потрошенный код, так и напрямую вызывающий «usp_SQLJobsActionGet») в SQL Management Studio, он отлично работает.
У вас есть какой-нибудь совет? Я уверен, что мне не хватает чего-то очень простого.
Спасибо.