【问题标题】:SQL Server stored procedure: asking for a parameter when running itSQL Server存储过程:运行时要求参数
【发布时间】:2015-12-10 19:55:25
【问题描述】:

我有以下存储过程:

CREATE PROCEDURE SigleEnseigne
    @Sigle VARCHAR(150) OUTPUT ,
    @Enseigne VARCHAR(150) OUTPUT ,
    @SigleEnseigne1 VARCHAR(150) OUTPUT
AS
BEGIN
    SELECT TOP 1
        @Sigle = ISNULL(John_Jack.Sigle, '') ,
        @Enseigne = ISNULL(John_Jack.Enseigne, '') ,
        @SigleEnseigne1 = CASE 
                             WHEN Code_Juridique LIKE 'M%'
                                THEN '      / ' + ISNULL(John_Jack.Enseigne, '')
                             WHEN ISNULL(John_Jack.Sigle, '') = ''
                                  AND ISNULL(John_Jack.Enseigne, '') = ''
                                THEN ''
                             ELSE @Sigle + ' / ' + @Enseigne
                          END
    FROM    
        John_Jack
END
GO

感谢这里的帮助,我已经能够创建它。

但是,当我执行存储过程时,出现以下错误

Msg 201、Niveau 16、État 4、Procédure SigleEnseigne、Ligne 89
La procédure ou fonction 'SigleEnseigne' 参加 le paramètre '@Sigle', qui n'a pas étéfourni。

它要求我提供参数@Sigle,但它包含我的存储过程中所需的一切。

更新:我正在执行这样的代码

EXEC SigleEnseigne

谁能给我指点一下?

谢谢

【问题讨论】:

  • 你能把代码粘贴到你实际执行存储过程的地方吗?
  • 嗨@Dane:查看我的更新
  • 啊...也许您需要将变量默认为空(“”),就好像您对不存在的记录执行 isnull 然后它为空一样。
  • @AndyK,我回答了你之前的问题,你似乎使用了我的查询,但没有接受答案。我已经在评论中回答了这个问题。你为什么要问一个新问题?
  • 真@GiorgiNakeuri。谢谢。很多问题都在徘徊,这就是为什么

标签: sql-server tsql


【解决方案1】:

在过程中使用所有参数作为输出,那么你应该在调用过程时设置这些参数

declare 
@Sigle VARCHAR(150), @Enseigne VARCHAR(150), @SigleEnseigne1 VARCHAR(150)
EXEC  SigleEnseigne @Sigle OUTPUT, @Enseigne OUTPUT, @SigleEnseigne1 OUTPUT

【讨论】:

  • 是的,这就是这里的情况。但是,我的评论仍然是您需要检查记录是否存在以使其为空。否则你只会得到空值。
  • 嗨@MegaTron,谢谢。请问有没有办法在 sp 内设置变量,而不是将其作为输入或输出提及?
  • 当然,只需将declare @Sigle VARCHAR(150), ... 放在BEGIN 之后,并在程序末尾添加select @Sigle, @Enseigne, @SigleEnseigne1。它将作为选择查询返回变量的值
  • 可以,在声明变量前加declare关键字
  • 很高兴能帮上忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2016-04-28
  • 2018-09-01
  • 1970-01-01
  • 2013-05-09
相关资源
最近更新 更多