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
当我在内部打电话(未存储过程)时,它可以完美地工作,因为我在@TableName
上使用PRINT
并获得结果。问题是当我调用此存储过程时,它试图将结果转换为int,而我不知道为什么?
Conversion failed when converting the nvarchar value 'E_GrupBilancoGelirTablosu_935_Form' to data type int
存储过程中的 return
值是 embly type int
。它应用于成功/错误代码(旧的Skool错误管理)。如果您想要其他东西,请查看使用output
参数。(请注意,当一个人首次开始使用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
(不需要外部变量和参数名称相同,它们恰好在上面的示例中)