【问题标题】:Stored Procedure Syntax存储过程语法
【发布时间】:2008-09-23 09:46:30
【问题描述】:

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

执行? = Validation.PopulateFaultsFileDetails ? , 0

虽然我不确定是什么?意思是

【问题讨论】:

  • 你从哪里得到“EXEC?= Validation.PopulateFaultsFileDetails?,0”?来自 SQL Profiler 还是来自其他地方?
  • 我是从 SQL Server 集成包 (.sln) 项目文件中的“执行 SQL 任务”框中获得的

标签: sql-server sql-server-2005 stored-procedures


【解决方案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 注入漏洞的风险。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      谢谢你的回答。

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-12-28
        • 2018-05-12
        • 2016-10-28
        • 2020-03-08
        • 2011-04-18
        • 2012-04-12
        • 2016-03-18
        • 2014-07-12
        相关资源
        最近更新 更多