当前位置: 首页 > 面试题库 >

如何从存储过程返回字符串值

仉明知
2023-03-14
问题内容
Alter procedure S_Comp(@str1 varchar(20),@r varchar(100) out)
as
declare  @str2 varchar(100)
set @str2  ='welcome to sql server. Sql server is a product of Microsoft'
if(PATINDEX('%'+@str1 +'%',@str2)>0)
    return @str1+'present in the string'
else 
    return @str1+'not present'

我正在执行上面的存储过程。我收到以下错误:

消息245,级别16,状态1,过程S_Comp,第8行在将varchar值“存在的Amruthanot”转换为数据类型int时,转换失败。

请帮我解决这个问题


问题答案:

您将结果放在RETURN值中,而不是传递的@r值中。

从MSDN

(返回)返回 的整数值。存储过程可以将整数值返回到调用过程或应用程序。

更改您的程序。

ALTER procedure S_Comp(@str1 varchar(20),@r varchar(100) out) as

    declare @str2 varchar(100) 
    set @str2 ='welcome to sql server. Sql server is a product of Microsoft' 
    if(PATINDEX('%'+@str1 +'%',@str2)>0) 
        SELECT @r =  @str1+' present in the string' 
    else 
        SELECT @r = @str1+' not present'

调用程序

  DECLARE @r VARCHAR(100)
  EXEC S_Comp 'Test', @r OUTPUT
  SELECT @r


 类似资料:
  • 我的目标是创建一个Rest控制器,该控制器将返回一个对象(我们称之为Car)。这个Rest控制器正在调用另一个Rest API(使用设置令牌并被授权进行调用所需的头),以便从不同的endpoint获取不同的数据,以便将它们混合在一起。就像如果你问特斯拉大约2个不同的汽车模型创造一个新的疯狂的汽车! 问题是,另一个API给我的对象看起来像(实际上我收到28个不同类型的字段,int、string、st

  • 问题内容: 这就是我所做的。 我不断收到错误: 消息156,级别15,状态1,过程INITCAP,第97行 关键字“ exec”附近的语法错误。 消息156,级别15,状态1,过程INITCAP,第100行 关键字“ exec”附近的语法错误。 我该怎么办?我希望该过程像在Oracle中一样工作:返回一个名称,例如:“ Steve”,“ Miller” 问题答案: 解决方案1 (我不会使用此解决方

  • 我有一个存储过程,它接受参数并返回一个长值。 我如何使用jdbcTemplate来调用这个存储过程并获得返回的值。 这样对吗?

  • 我有一个使用SimpleJDBCCall调用DB过程的DAO函数。但是,我无法读取存储过程返回的CLOB数据。当我尝试对返回的CLOB值(result.get(“out_rtn_xml”))执行.toString()时,我只在字符串中得到以下内容:oracle.sql.CLOB@f762282a 下面是代码片段。

  • 问题内容: 如何从WebAssembly函数返回JavaScript字符串? 下列模块可以用C(++)编写吗? 另外:我可以将其传递给JS引擎进行垃圾回收吗? 问题答案: WebAssembly本身不支持字符串类型,它,而支撑件///值类型以及/用于存储。 这取决于您要执行的操作,但似乎直接访问缓冲区是最简单的: 如果您的模块具有功能,那么它将在实例化时执行。否则,您可能会调用一个导出,例如。 完

  • 问题内容: 我正在尝试从存储过程中获取返回值,但它始终返回0。 C#代码 SP 在所有情况下,它都返回0。我不知道问题所在。 问题答案: 我尝试了类似您的代码,并且可以按预期工作。 但是,您的代码中两次调用ExecuteNonQuery。 首次调用时,将按预期插入记录,然后为返回值添加参数并再次执行命令。但是现在记录已存在,并且存储过程始终落在else块中,因此始终返回零。