【问题标题】:SQL Server: stored proc tries to convert varchar OUTPUT into int @Return_ValueSQL Server:存储过程尝试将 varchar OUTPUT 转换为 int @Return_Value
【发布时间】:2015-10-26 18:22:06
【问题描述】:

我有这个存储过程:

create proc Sponsors.GetLightBoxAd
(
@SponsorID varchar(30),
@ADIDOut varchar(30) OUTPUT,
@UserID varchar(30),
@ProjectID varchar(50),
@PlatformID int
)
as 
begin
  SELECT TOP 1 @ADIDOut = AD.ADID --my output. AD.ADID is a varchar(30) column
  FROM Sponsors.AD
  WHERE AD.Active = 1 and AD.SponsorID = @SponsorID
  ORDER by NEWID() -- I want the first one picked at random
  IF ISNULL(@ADIDOut,-1) != -1 --if the result set wasn't null, run some update queries with the result
  BEGIN --These queries do not have output variables.
    EXEC Sponsors.proc1 @ADIDOut, @SponsorID
    EXEC Projects.proc2 @ProjectID,@ADIDOut,@UserID,@PlatformID 
  END --end the if
end --end the proc
go

这应该返回一个空值或一个varchar。 但是,当我尝试执行查询时,SSMS 会自动生成此代码供我运行查询:

USE [MyDB]
GO

DECLARE @return_value int, --Why is this here???
        @ADIDOut varchar(30) -- this should be my only output

EXEC    @return_value = [Sponsors].[GetLightBoxAd]
        @SponsorID = N'Alienware',
        @ADIDOut = @ADIDOut OUTPUT,
        @UserID = N'127.0.0.1',
        @ProjectID = N'TestProject',
        @PlatformID = 1

SELECT  @ADIDOut as N'@ADIDOut'

SELECT  'Return Value' = @return_value --why is this here?

GO

然后它给了我一个错误,因为它似乎试图将 ADIDOut 的结果转换为 int...为什么有一个 int @Return_Value 变量,为什么它试图将我的实际 OUTPUT 结果放入其中?

【问题讨论】:

  • 您使用的是哪个版本的 SQL Server?
  • 这就是 SSMS 通常为存储过程生成 EXECUTE 语句的方式。它不应该导致任何错误。您收到的错误信息是什么?
  • @Rieekan SQL Server 2012。
  • @TabAlleman:消息 245,级别 16,状态 1,过程 GetLightBoxAd,第 16 行将 varchar 值“GamingEvolved1”转换为数据类型 int 时转换失败。 GamingEvolved1 是我呼叫的测试赞助商的 ADID。
  • 检查 proc1 和 proc2 参数的数据类型,并确保其中一个不期望您传递 ADIDOut 的 int 数据类型。

标签: sql-server stored-procedures


【解决方案1】:

错误在这一行:

IF ISNULL(@ADIDOut,-1) != -1 

似乎因为我只放了 -1 而没有引号作为比较,sql 将其读取为整数并且无法将其与可为空的字符串进行比较,因此引发了错误。将 -1 放入引号可修复错误并运行查询。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2013-12-28
    • 2013-10-10
    相关资源
    最近更新 更多