带输出的存储过程 - 必须声明标量变量

Stored procedure with OUTPUT - Must declare the scalar variable

我正在编写一个存储过程,它将从 C# 中执行以从数据库中获取数据。因此,我必须将 GUID 传递给此存储过程,它应该在 table Contact 中的 Lead table 中找到数据& return 数据通过输出参数传回 C# 应用程序。

当我尝试在 SSMS 中执行此存储过程时,出现 SQL 异常

Must declare the scalar variable "@LastName"

代码:

ALTER PROCEDURE [api].[GetUser_NetId]
      @NetId uniqueidentifier
    , @LastName nvarchar(200) = '' OUTPUT
    , @FirstName nvarchar(200) = ''  OUTPUT
    , @Country uniqueidentifier = NULL  OUTPUT
    , @Newsletter bit = 0  OUTPUT
AS
    DECLARE
        @Table      SMALLINT

    SET @Table = (
        SELECT MIN(T.ID) FROM (
            SELECT 100 AS [ID] FROM dbo.Contact WHERE Net_ID = @NetId
            UNION ALL
            SELECT 200 AS [ID] FROM dbo.Lead WHERE Net_ID = @NetId
            ) T
        )

    DECLARE @SQL NVARCHAR(MAX)

    SET @SQL = CONCAT(
'   SELECT 
        @LastName = tbl.LastName,
        @FirstName = tbl.FirstName,
        @Country = tbl.Address1CountryId,
        @Newsletter = tbl.Newsletter,
    FROM
        dbo.'
    , CASE @Table
        WHEN 100 THEN 'Contact'
        WHEN 200 THEN 'Lead'
    END
    , ' as tbl
    WHERE 1=1
        AND tbl.Net_Id = '''
    , @NetId
    , '''' 
    )

    EXEC(@SQL)

..稍微简单一点的方法

ALTER PROCEDURE [api].[GetUser_NetId]
      @NetId uniqueidentifier
    , @LastName nvarchar(200) = '' OUTPUT
    , @FirstName nvarchar(200) = ''  OUTPUT
    , @Country uniqueidentifier = NULL  OUTPUT
    , @Newsletter bit = 0  OUTPUT
AS
BEGIN
    
    IF EXISTS(SELECT * FROM dbo.Contact WHERE Net_ID = @NetId)
    BEGIN
        SELECT 
            @LastName = tbl.LastName,
            @FirstName = tbl.FirstName,
            @Country = tbl.Address1CountryId,
            @Newsletter = tbl.Newsletter
        FROM dbo.Contact WHERE Net_ID = @NetId;
    END
    ELSE
    BEGIN
        SELECT 
            @LastName = tbl.LastName,
            @FirstName = tbl.FirstName,
            @Country = tbl.Address1CountryId,
            @Newsletter = tbl.Newsletter
        FROM dbo.Lead WHERE Net_ID = @NetId;
    END
END

我收到如下错误:

Msg 137, Level 15, State 2, Line 18
Must declare the scalar variable "@CustomerKey".
Msg 137, Level 15, State 1, Line 21
Must declare the scalar variable "@FirstName".
Msg 137, Level 15, State 1, Line 30
Must declare the scalar variable "@FirstName".

IF EXISTS(SELECT * FROM VW_FactInternetSales  WHERE CustomerKey = @CustomerKey)
    BEGIN   
        SELECT
        @FirstName = .FirstName,
        @TaxAmt = .TaxAmt,
        @Country = .Country,
        @CustomerKey = .CustomerKey
        FROM DimCustomer WHERE CustomerKey = @CustomerKey
        END
        ELSE
        BEGIN
            SELECT
            @FirstName = .FirstName,
            @TaxAmt = .TaxAmt,
            @Country = .Country,
            @CustomerKey = .CustomerKey
            FROM VW_FactInternetSales WHERE CustomerKey = @CustomerKey
        END
    END

我无法在这一行中添加我的 table

@FirstName = .FirstName,
        @TaxAmt = .TaxAmt,
        @Country = .Country,
        @CustomerKey = .CustomerKey