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

Sql server 在sql management studio中,存储过程返回int而不是NVARCHAR,sql-server,stored-procedures,Sql Server,Stored Procedures,当我调用inside(不是存储过程)时,它工作得非常好,因为我在@TableName上使用了PRINT,并得到了结果。问题是,当我调用这个存储过程时,它试图将结果转换为int,我不知道为什么 Create PROCEDURE GETTABLENAME(@TableId nvarchar(10)) as begin declare @TableName nvarchar(150), @SQLString nvarchar(4000) SET @SQLString = N'se

当我调用inside(不是存储过程)时,它工作得非常好,因为我在
@TableName
上使用了
PRINT
,并得到了结果。问题是,当我调用这个存储过程时,它试图将结果转换为int,我不知道为什么

  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 

存储过程返回的
值总是
int
类型。它用于成功/错误代码(旧的skool错误管理)。如果你还想要别的东西,那就考虑使用它。(请注意,首次开始使用
output
参数时的一个常见错误是忽略在参数列表和调用站点中使用
output
标记)

比如说:

Conversion failed when converting the nvarchar value 'E_GrupBilancoGelirTablosu_935_Form' to data type int
然后就这样叫着:

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 

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

存储过程中的
返回值总是
int
类型。它用于成功/错误代码(旧的skool错误管理)。如果你还想要别的东西,那就考虑使用它。(请注意,首次开始使用
output
参数时的一个常见错误是忽略在参数列表和调用站点中使用
output
标记)

比如说:

Conversion failed when converting the nvarchar value 'E_GrupBilancoGelirTablosu_935_Form' to data type int
然后就这样叫着:

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 

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

好的,那么您可以修复吗,据我所知,我不会在sp中使用return,但在参数部分,我将添加输出,并且在调用时,我将添加声明的变量来调用rite?这里也绝对不需要动态sql。好的,你能修复吗?据我所知,我不会在sp中使用return,但在参数部分我将添加输出,当我调用时,我将添加声明的变量来调用rite?这里也绝对不需要动态sql。