Вопрос

Моя хранимая процедура вызывается, как показано ниже, из пакета внедрения 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 преимущества:

  1. вы можете повторно использовать один и тот же бит SQL с разными значениями
  2. вы можете получить возвращаемое значение и проверить успех/ошибку
  3. Если передаваемое вами значение является строкой, оно должно быть правильно экранировано, что снижает риск уязвимостей SQL-инъекций в вашем приложении.

Другие советы

?обозначает переменную, точнее, параметр.Первый ?— возвращаемое значение хранимой процедуры, а второе — первый параметр хранимой процедуры.

Спасибо, я ценю ответ.

Я смог успешно выполнить хранимую процедуру с помощью Declarate @faultsfilename Varchar Dercare @faultsfileid int exec @faultsfileid = valyation.populatefaultsfiledetails 'samemonth test.txt', @faultsfileid select @faultsfileid '

Но когда я передаю входной параметр как «SameMonth Test.txt» в пакете интеграции, я получаю сообщение об ошибке:

Имена параметров не могут быть смесью порядковых и именованных типов.".Возможные причины неисправности:Проблемы с запросом, свойство «ResultSet» задано неправильно, параметры заданы неправильно или соединение установлено неправильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top