代码之家  ›  专栏  ›  技术社区  ›  Samra

外部应用与INSERT语句

  •  0
  • Samra  · 技术社区  · 8 年前

    我想做这样的事

    CREATE TABLE #tempFacilitiesAssociated 
    (
         FacilityID BIGINT, 
         FacilityName VARCHAR(MAX), 
         IsPrimary BIT
    )
    
    -- Insert statements for procedure here
    ;WITH CTE_RESULT AS 
    (
        SELECT
            usr_id, t.name AS Title, 
            usr_fname, usr_lname, primaryAddress.add_suburb,
            CASE
               WHEN primaryAddress.add_suburb = @suburb THEN 1
               WHEN t.name = @Title THEN 2
               ELSE 3
            END AS MatchOrder
        FROM
            core_users u
        LEFT JOIN
            RIDE_ct_title t ON t.title_id = u.usr_title
        OUTER APPLY
            (INSERT INTO #tempFacilitiesAssociated 
                 EXEC dbo.[sp_Common_Get_AllFacilitiesForSupervisor] usr_id, 5
    
             SELECT TOP 1 fa.* 
             FROM CORE_Facilities f 
             LEFT JOIN CORE_FacilityAddresses fa ON fac_id = fa.add_owner
             WHERE fac_id = (SELECT TOP 1 FacilityID 
                             FROM #tempFacilitiesAssociated 
                             WHERE IsPrimary = 1)) primaryAddress
        WHERE
            u.usr_fname = @FirstName AND usr_lname = @LastName
    )
    

    所以,首先我想通过一个存储过程获取该用户的所有设施,然后使用它来应用和选择它的郊区

    使现代化

    我试着用函数代替

    CREATE FUNCTION fn_GetAddressForUserFacility
        (@UserID BIGINT)
    RETURNS @Address TABLE (FacilityID BIGINT, 
                            add_address NVARCHAR(MAX), 
                            add_addressline2 NVARCHAR(MAX), 
                            add_suburb NVARCHAR(MAX) 
                           )
    AS
    BEGIN
        DECLARE @FacilitiesAssociated TABLE
                                      (FacilityID BIGINT, 
                                       FacilityName NVARCHAR(MAX), 
                                       IsPrimary BIT)
    
        INSERT INTO @FacilitiesAssociated 
            EXEC dbo.[sp_Common_Get_AllFacilitiesForSupervisor] @UserID, 5
    
        INSERT INTO @Address
            SELECT TOP 1 
                fa.add_owner, fa.add_address, fa.add_addressline2, fa.add_suburb 
            FROM 
                CORE_Facilities f 
            LEFT JOIN 
                CORE_FacilityAddresses fa ON f.fac_id = fa.add_owner AND add_type = 5
            WHERE
                fac_id = (SELECT TOP 1 FacilityID 
                          FROM @FacilitiesAssociated 
                          WHERE IsPrimary = 1)  
        RETURN 
    END
    

    但现在它又回来了

    在函数中使用副作用运算符“INSERT EXEC”无效。

    0 回复  |  直到 8 年前
    推荐文章