0
我有这个存储过程:的SQL Server:存储过程试图为varchar输出转换成INT @Return_Value
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 @Rurn_Value变量,为什么它试图把我的实际OUTPUT结果放入它?
您正在使用哪个版本的SQL Server? – Rieekan
这就是SSMS一般为存储过程生成EXECUTE语句的方式。它不应该导致任何错误。什么是你得到的错误信息? –
@Rieekan SQL Server 2012. – ConnorU