1

我的存储过程从 SQL Server 2005 中的 SQL instegartion 包调用如下

执行?= Validation.PopulateFaultsFileDetails ?, 0

虽然我不确定是什么?方法

4

3 回答 3

1

这 ?代表一个变量,准确地说是一个参数。首先 ?是存储过程的返回值,第二个是存储过程的第一个参数

于 2008-09-23T09:50:06.807 回答
1

调用此 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 注入漏洞的风险。
于 2008-09-23T10:27:51.380 回答
0

谢谢,我很感激答案。

我能够使用 DECLARE @FaultsFileName varchar DECLARE @FaultsFileID int EXEC @FaultsFileID = Validation.PopulateFaultsFileDetails 'SameMonth Test.txt' , @FaultsFileID SELECT @FaultsFileID 成功执行存储过程

但是,当我在集成包中将输入参数作为“SameMonth Test.txt”传递时,我收到一条错误消息:

参数名称不能是序数类型和命名类型的混合。”。可能的失败原因:查询出现问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。

于 2008-09-23T10:34:14.110 回答