【问题标题】:How to use SQL Server stored procedure in laravel如何在laravel中使用SQL Server存储过程
【发布时间】:2023-02-02 15:07:17
【问题描述】:

我们使用 rdlc 进行报告,现在我们的系统已转移到 laravel 9,我想获取 laravel 中已经存在的过程数据,但我不知道如何进行搜索,但没有找到任何相关信息。我附上其中一个程序。

这是 sql 程序,我想在我的 laravel 应用程序中使用需要指导。

USE \[NZMIS\]
GO
/\*\*\*\*\*\* Object:  StoredProcedure \[dbo\].\[RptAAUReport\]    Script Date: 1/20/2023 12:42:06 AM \*\*\*\*\*\*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE \[dbo\].\[RptAAUReport\]
@DateFrom AS datetime,
@DateTo AS datetime,
@OrganizationID AS bigint = NULL,
@CityID AS bigint = NULL,
@StateID AS bigint = NULL    ,
@USERID AS  uniqueidentifier = NULL  ,
@Status As varchar(250)  = NULL
AS
BEGIN
\--select \* from OutreachWorkerServiceDetails

    DECLARE @Organization AS Varchar(250) = ''
    DECLARE @City AS Varchar(250) = ''
    DECLARE @State AS Varchar(250) = '' 
    DECLARE @TotalRecords AS bigint = 0

\--where \[SyringeOut\] = 0
DECLARE @UserString AS NVARCHAR(MAX) = @USERID

    DECLARE @QueryAAU NVARCHAR(MAX)= '
    (
        SELECT  Organizations.Name, Cities.CityName, Clients.RegNo,ClientAAU.[Status], ClientAAU.DateAdmission, ClientAAU.DateDischarge,ClientAAU.ARVInitiationDate
         FROM   [NZMIS].[dbo].ClientAAU
            INNER JOIN  [NZMIS].[dbo].[Cities] ON [Cities].[ID] = ClientAAU.[CityID]
            INNER JOIN  [NZMIS].[dbo].[Organizations] ON [Organizations].[ID] = ClientAAU.[OrganizationID]
            INNER JOIN  [NZMIS].[dbo].[Clients] ON [Clients].[ID] = ClientAAU.[ClientID]
            INNER JOIN [NZMIS].[dbo].[States] ON [States].ID = [Cities].StateID' + CHAR(13)
    --SET   @QueryAAU = CASE WHEN @CountryID IS NOT NULL THEN @QueryAAU + ' AND [Clients].[CountryID] = ' + CAST(@CountryID as varchar) ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @StateID IS NOT NULL THEN @QueryAAU + ' AND [States].[ID] = ' + CAST(@StateID as varchar) ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @OrganizationID IS NOT NULL THEN @QueryAAU + ' AND [ClientAAU].[OrganizationID] = ' + CAST(@OrganizationID as varchar) ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @CityID IS NOT NULL THEN @QueryAAU + ' AND [ClientAAU].[CityID] = ' + CAST(@CityID as varchar) ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @DateFrom IS NOT NULL AND @Status IS NULL   THEN @QueryAAU +  ' AND ClientAAU.Dateadmission >= ' + ''''+ CAST(@DateFrom as varchar) + '''' ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @DateTo IS NOT NULL AND @Status IS NULL THEN @QueryAAU +  ' AND ClientAAU.Dateadmission <= ' + ''''+ CAST(@DateTo as varchar) + '''' ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @DateFrom IS NOT NULL AND @Status IS NOT NULL   THEN @QueryAAU +  ' AND ClientAAU.DateDischarge >= ' + ''''+ CAST(@DateFrom as varchar) + '''' ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @DateTo IS NOT NULL AND @Status IS NOT NULL THEN @QueryAAU +  ' AND ClientAAU.DateDischarge <= ' + ''''+ CAST(@DateTo as varchar) + '''' ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @Status IS NOT NULL    THEN @QueryAAU +  ' AND ClientAAU.[Status] = ' + ''''+ CAST(@Status as nvarchar(250)) + '''' ELSE @QueryAAU END + CHAR(13) 
    SET @QueryAAU = CASE WHEN @USERID IS NOT NULL    THEN @QueryAAU +  ' AND ClientAAU.[USERID] = ' + ''''+ CAST(@UserString as nvarchar(250)) + '''' ELSE @QueryAAU END + CHAR(13) 
    --PRINT @QueryAAU;

\-- PRINT @QueryAAU

        --EXECUTE sp_executesql @QueryAAU
     SET @QueryAAU = @QueryAAU + CHAR(10) + ')
    
    
    
    SELECT @TotalRecords = COUNT(*)
    FROM ClientAAU
            INNER JOIN  [NZMIS].[dbo].[Cities] ON [Cities].[ID] = ClientAAU.[CityID]
            INNER JOIN  [NZMIS].[dbo].[Organizations] ON [Organizations].[ID] = ClientAAU.[OrganizationID]
            INNER JOIN  [NZMIS].[dbo].[Clients] ON [Clients].[ID] = ClientAAU.[ClientID]
            INNER JOIN [NZMIS].[dbo].[States] ON [States].ID = [Cities].StateID
    WHERE ClientAAU.ClientID IS NOT NULL'
    SET @QueryAAU = CASE WHEN @StateID IS NOT NULL THEN @QueryAAU + ' AND [States].[ID] = ' + CAST(@StateID as varchar) ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @OrganizationID IS NOT NULL THEN @QueryAAU + ' AND [ClientAAU].[OrganizationID] = ' + CAST(@OrganizationID as varchar) ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @CityID IS NOT NULL THEN @QueryAAU + ' AND [ClientAAU].[CityID] = ' + CAST(@CityID as varchar) ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @DateFrom IS NOT NULL AND @Status IS NULL   THEN @QueryAAU +  ' AND ClientAAU.Dateadmission >= ' + ''''+ CAST(@DateFrom as varchar) + '''' ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @DateTo IS NOT NULL AND @Status IS NULL THEN @QueryAAU +  ' AND ClientAAU.Dateadmission <= ' + ''''+ CAST(@DateTo as varchar) + '''' ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @DateFrom IS NOT NULL AND @Status IS NOT NULL   THEN @QueryAAU +  ' AND ClientAAU.DateDischarge >= ' + ''''+ CAST(@DateFrom as varchar) + '''' ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @DateTo IS NOT NULL AND @Status IS NOT NULL  THEN @QueryAAU +  ' AND ClientAAU.DateDischarge <= ' + ''''+ CAST(@DateTo as varchar) + '''' ELSE @QueryAAU END + CHAR(13)
    SET @QueryAAU = CASE WHEN @Status IS NOT NULL    THEN @QueryAAU +  ' AND ClientAAU.[Status] = ' + ''''+ CAST(@Status as nvarchar(250)) + '''' ELSE @QueryAAU END + CHAR(13) 
    SET @QueryAAU = CASE WHEN @USERID IS NOT NULL    THEN @QueryAAU +  ' AND ClientAAU.[USERID] = ' + ''''+ CAST(@UserString as nvarchar(250)) + '''' ELSE @QueryAAU END + CHAR(13) 
    
    
    /*
    SET @QueryAAU = CASE WHEN ISNUMERIC(@OrganizationID) > 0 THEN @QueryAAU + ' AND [ClientAAU].[OrganizationID] = ' + CAST(@OrganizationID as varchar) ELSE @QueryAAU END
    SET @QueryAAU = CASE WHEN ISNUMERIC(@CityID) > 0 THEN @QueryAAU + ' AND [ClientAAU].[CityID] = ' + CAST(@CityID as varchar) ELSE @QueryAAU END
    SET @QueryAAU = CASE WHEN LEN(@DateFrom) > 0 THEN @QueryAAU +  ' AND [ClientAAU].[DateAdmission] >= ' + ''''+ CAST(@DateFrom as varchar) + '''' ELSE @QueryAAU END
    SET @QueryAAU = CASE WHEN LEN(@DateTo) > 0 THEN @QueryAAU +  ' AND [ClientAAU].[DateAdmission] <= ' + ''''+ CAST(@DateTo as varchar) + '''' ELSE @QueryAAU END
    SET @QueryAAU = CASE WHEN @USERID IS NOT NULL    THEN @QueryAAU +  ' AND ClientAAU.[UserID] = ' + ''''+ CAST(@UserString as nvarchar(250)) + '''' ELSE @QueryAAU END + CHAR(13) 
    SET @QueryAAU = CASE WHEN @Status IS NOT NULL    THEN @QueryAAU +  ' AND ClientAAU.[Status] = ' + ''''+ CAST(@Status as nvarchar(250)) + '''' ELSE @QueryAAU END + CHAR(13) 

SET @QueryAAU = CASE WHEN LEN(@State) \> 0 THEN @QueryAAU +  ' AND \[Cities\].\[StateID\] \<= ' + ''''+ CAST(@State as varchar) + '''' ELSE @QueryAAU END
\*/

    EXECUTE sp_executesql @QueryAAU, N'@TotalRecords bigint OUTPUT', @TotalRecords OUTPUT
    
    
    PRINT @QueryAAU
    SET @Organization = (
            SELECT  [Organizations].[Name]
            FROM    [NZMIS].[dbo].[Organizations]
            WHERE   [Organizations].[IsActive] = 'True'
                AND [Organizations].[ID] = @OrganizationID
                
        )
        SET @City = (
            SELECT  [Cities].[CityName]
            FROM    [NZMIS].[dbo].[Cities]
            WHERE   [Cities].[ID] = @CityID
            )
    SET @State = ( --select * from States
            SELECT  States.StateName
            FROM    [NZMIS].[dbo].States
            WHERE   States.[ID] = @StateID
            )
    SELECT  @TotalRecords AS [TotalRecords],@Organization AS [Organization],@City AS [City],@State AS [State], @DateFrom AS [DateFrom], @DateTo AS [DateTo]

END

我将如何在 laravel 中调用此过程

【问题讨论】:

    标签: php laravel stored-procedures laravel-8 procedure


    【解决方案1】:

    试试这个,我们正在使用另一种方法在我们的 laravel 项目中使用存储过程,我认为这是最好的方法。您也可以尝试/参考此代码如下

    DELIMITER $$
    CREATE DEFINER=`project`@`localhost` PROCEDURE `user_save_establishment`(IN `user_idx` INT(11), IN `restaurant_id` INT(11))
    BEGIN
    INSERT INTO `save_restaurant` (user_id, restaurant_id) VALUES (`user_idx`,`restaurant_id`);
    END$$
    DELIMITER ;
    

    以上是该过程的代码,在 laravel 中我们使用如下方式使用过程插入数据:

    $save_establishment = DB::insert("CALL user_save_establishment(?,?)", array($user_id, $restaurant_id));
    

    同样,您可以使用选择、更新、删除等操作。

    这对我有用。

    提前欢迎。

    【讨论】:

    • 我想从此存储过程中获取数据
    • 只需在过程中使用“选择”而不是“插入”,并在我的代码的数组部分传递过程的输入值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多