存储过程在sql management studio中返回int而不是NVARCHAR

时间:2017-03-07 13:02:39

标签: sql-server stored-procedures

  Create PROCEDURE GETTABLENAME(@TableId nvarchar(10))
as
begin
declare @TableName nvarchar(150),
        @SQLString nvarchar(4000)

SET @SQLString = N'select  @TableName=sys.tables.name from sys.tables 
        where sys.tables.name like  ''%[_]'+@TableId+'[_]%'' '

exec   sp_executesql @SQLString,
       N'@TableName nvarchar(150) output,  @TableId nvarchar(10) '
       ,@TableId = @TableId
       ,@TableName = @TableName output

return  @TableName  
end 

当我在里面打电话(不是存储过程)时,它完美地工作,因为我在PRINT上使用@TableName并得到了我的结果。问题是当我调用这个存储过程时,它试图将结果转换为int而我不知道为什么?

Conversion failed when converting the nvarchar value 'E_GrupBilancoGelirTablosu_935_Form' to data type int

1 个答案:

答案 0 :(得分:5)

存储过程的return始终类型为int。它意味着用于成功/错误代码(旧的skool错误管理)。如果您还想要其他内容,请查看使用output parameters。 (请注意,首次使用output参数时出现的常见错误是忽略在呼叫站点的参数列表中使用OUTPUT标记)

所以,比如:

Create PROCEDURE GETTABLENAME(
  @TableId nvarchar(10),
  @TableName nvarchar(150) output --Declared as parameter rather than local var
  )
as
begin
declare  @SQLString nvarchar(4000)

SET @SQLString = N'select  @TableName=sys.tables.name from sys.tables 
        where sys.tables.name like  ''%[_]'+@TableId+'[_]%'' '

exec   sp_executesql @SQLString,
       N'@TableName nvarchar(150) output,  @TableId nvarchar(10) '
       ,@TableId = @TableId
       ,@TableName = @TableName output

return  @TableName  
end 

然后调用如:

DECLARE @TableName nvarchar(150)
EXEC GETTABLENAME N'abc',@TableName OUTPUT

(不要求外部变量和参数名称相同,它们恰好在上面的例子中)