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