Синтаксис хранимой процедуры
-
02-07-2019 - |
Вопрос
Моя хранимая процедура вызывается, как показано ниже, из пакета внедрения SQL в SQL Server 2005.
ИСПОЛНИТЕЛЬ?= Валидация.PopulateFaultsFileDetails ?, 0
Хотя я не уверен, что?означает
Решение
При вызове этого оператора SQL оба вопросительных знака (?) будут заменены.Первая будет заменена переменной, которая получит возвращаемое значение хранимой процедуры.Второе будет заменено значением, которое будет передано в хранимую процедуру.Код для использования этого оператора будет выглядеть примерно так (псевдокод):
dim result
SQL = "EXEC ? = Validation.PopulateFaultsFileDetails ? , 0"
SQL.execute(result, 99) // pass in 99 to the stored proc
debug.print result
Это дает вам 3 преимущества:
- вы можете повторно использовать один и тот же бит SQL с разными значениями
- вы можете получить возвращаемое значение и проверить успех/ошибку
- Если передаваемое вами значение является строкой, оно должно быть правильно экранировано, что снижает риск уязвимостей SQL-инъекций в вашем приложении.
Другие советы
?обозначает переменную, точнее, параметр.Первый ?— возвращаемое значение хранимой процедуры, а второе — первый параметр хранимой процедуры.
Спасибо, я ценю ответ.
Я смог успешно выполнить хранимую процедуру с помощью Declarate @faultsfilename Varchar Dercare @faultsfileid int exec @faultsfileid = valyation.populatefaultsfiledetails 'samemonth test.txt', @faultsfileid select @faultsfileid '
Но когда я передаю входной параметр как «SameMonth Test.txt» в пакете интеграции, я получаю сообщение об ошибке:
Имена параметров не могут быть смесью порядковых и именованных типов.".Возможные причины неисправности:Проблемы с запросом, свойство «ResultSet» задано неправильно, параметры заданы неправильно или соединение установлено неправильно.