为变量赋值的SELECT语句不能与数据检索操作SQL Server 2012结合使用

Ibr*_*mer 1 sql sql-server stored-procedures sql-server-2012

我现在几个小时都在努力解决这个问题.我对存储过程很新,我有这个问题,我无法用任何方法弄清楚,我相信这是一个小傻事,但我无法弄明白

CREATE PROCEDURE [dbo].[IntegrationGetKuwaitPrize]
    @ApplicationID int,
    @ChosenFieldOfAward nvarchar(MAX) out
AS
    declare @ID int = (select top (1) ID 
                       from [dbo].[KuwaitPrizeApplicarion] 
                       where [ApplicationID] = @ApplicationID);

    SELECT 
        [CurrentAddress] as [current_address] /* I'm getting the error at this line */
        , (SELECT [dbo].[Country].NameEN from [dbo].[Country] 
           where [dbo].[Country].ID = 
                (SELECT [dbo].[KuwaitPrizeApplicarion].[PastNationality] 
                 FROM [dbo].[KuwaitPrizeApplicarion] 
                 WHERE [dbo].[KuwaitPrizeApplicarion].[ApplicationID] = @ApplicationID)) AS [past_nationality]
        , (SELECT [dbo].[Country].NameEN 
           FROM [dbo].[Country] 
           WHERE [dbo].[Country].ID = 
                 (SELECT [dbo].[KuwaitPrizeApplicarion].[PresentNationality]
                  FROM [dbo].[KuwaitPrizeApplicarion] 
                  WHERE [dbo].[KuwaitPrizeApplicarion].[ApplicationID] = @ApplicationID)) AS [present_nationality]
        , [PassportNo] AS [passport_no_]
        , [PassportExpireDate] AS [passport_expire_date] 
        , [PassportIssueDate] AS [passport_date_of_issue]
        , (SELECT [dbo].[Country].NameEN 
           FROM [dbo].[Country] 
           WHERE [dbo].[Country].ID = 
                 (SELECT [dbo].[KuwaitPrizeApplicarion].[PassportNationality] 
                  FROM [dbo].[KuwaitPrizeApplicarion] 
                  WHERE [dbo].[KuwaitPrizeApplicarion].[ApplicationID] = @ApplicationID)) AS [passport_nationality]
        , [YearOFBirth] AS [year_of_birth]
        , [EmailAddress] AS [e_mail_address]
        , [HomePhoneNo] AS [phone_no_home]
        , [WorkPhoneNo] AS [phone_no_work_dir_]
        , [PlaceOfBirth] AS [place_of_birth]
        , [Mobile] AS [mobile]
        , [PassportIssuePlace] AS [passport_place_of_issue]
        , [FaxNo] AS [fax_number]
        , @ChosenFieldOfAward = (SELECT [dbo].[FieldOfAward].[FieldOfAward] 
                                 FROM [dbo].[FieldOfAward] 
                                 WHERE [dbo].[FieldOfAward].[ID] = 
                                     (SELECT [dbo].[KuwaitPrizeApplicarion].[FieldOfAwardID]
                                      FROM [dbo].[KuwaitPrizeApplicarion] 
                                      WHERE [dbo].[KuwaitPrizeApplicarion].[ApplicationID] = @ApplicationID))
        , @ChosenFieldOfAward AS [field_of_award]
        , (SELECT [dbo].[Topic].TopicName 
           FROM [dbo].[Topic] 
           WHERE [dbo].[Topic].[ID] =
                 (SELECT [dbo].[KuwaitPrizeApplicarion].[TopicID]
                  FROM [dbo].[KuwaitPrizeApplicarion] 
                  WHERE [dbo].[KuwaitPrizeApplicarion].[ApplicationID] = @ApplicationID)) AS topic_of_award
     FROM 
         [dbo].[KuwaitPrizeApplicarion]
     WHERE 
         ApplicationID = @ApplicationID

 RETURN 0
Run Code Online (Sandbox Code Playgroud)

Spa*_*rky 6

这是你的问题所在,

 , [PassportIssuePlace] as [passport_place_of_issue]
 , [FaxNo] as [fax_number]
 , @ChosenFieldOfAward = (Select [dbo].[FieldOfAward].[FieldOfAward] 
 from [dbo].[FieldOfAward] 
 where [dbo].[FieldOfAward].[ID]=select [dbo].[KuwaitPrizeApplicarion].          [FieldOfAwardID]
                                                                                                 from [dbo].[KuwaitPrizeApplicarion] where 
Run Code Online (Sandbox Code Playgroud)

您正在返回值(PassportIssuePlace)和(FaxNo)以及更新变量@ChosenFieldOfAward.

如消息所示,您不能在同一个select语句中执行这两个操作.您需要将它们分成两个单独的select语句.

JOIN语法示例

Select [dbo].[FieldOfAward].[FieldOfAward] 
from [dbo].[FieldOfAward] fld
join [dbo].[KuwaitPrizeApplicarion] awd on fld.[ID] = awd.[FieldOfAwardOD]
where awd.[ApplicationID] = @ApplicationID
Run Code Online (Sandbox Code Playgroud)