簡體   English   中英

SQL Server中的臨時表

[英]Temp Table in SQL Server

我在SQL Server存儲過程中使用了if else語句。

我會選擇記錄並存儲在臨時表中。 但是我必須在每種情況下使用不同名稱的臨時表。

是否可以在每個if else條件下使用相同的臨時表?

這是我的存儲過程

alter procedure GetRecords
    @Id int ,
    @status varchar(10),
    @EmpId int,
    @PageIndex INT = 1,
    @PageSize INT = 10,
    @RecordCount INT OUTPUT
as
begin
    if(@Id = 1)
    begin
        select ROW_NUMBER() OVER  (ORDER BY Id  desc)AS RowNumber,Id,dDateTime,[Status],Stage 
        INTO #Results  from DiscrepencyMaster     where [Status]=@status

        SELECT @RecordCount = COUNT(*)
        FROM #Results

        SELECT * FROM #Results
        WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
    end
    else if (@Id = 2)
    begin
        select ROW_NUMBER() OVER  (ORDER BY Id  desc)AS RowNumber,Id,dDateTime,[Status],Stage 
        INTO #Results1  from DiscrepencyMaster where EmpId=@EmpId

        SELECT @RecordCount = COUNT(*)
        FROM #Results1

        SELECT * FROM #Results1
        WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
    end 
end

這對你有用嗎?

alter procedure GetRecords
    @Id int ,
    @status varchar(10),
    @EmpId int,
    @PageIndex INT = 1,
    @PageSize INT = 10,
    @RecordCount INT OUTPUT
as
begin

        IF OBJECT_ID('tempdb..#Results') IS NOT NULL
        DROP TABLE #Results



    if(@Id = 1)
    begin 

        IF OBJECT_ID('tempdb..#Results') IS NOT NULL
        DROP TABLE #Results


        INSERT INTO #Results
        select ROW_NUMBER() OVER  (ORDER BY Id  desc)AS RowNumber,Id,dDateTime,[Status],Stage 
        from DiscrepencyMaster     where [Status]=@status


        SELECT @RecordCount = @@ROWCOUNT


        SELECT * FROM #Results
        WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1


    end
    else if (@Id = 2)
    begin

        IF OBJECT_ID('tempdb..#Results') IS NOT NULL
        DROP TABLE #Results


        INSERT INTO #Results    
        select ROW_NUMBER() OVER  (ORDER BY Id  desc)AS RowNumber,Id,dDateTime,[Status],Stage 
        from DiscrepencyMaster where EmpId=@EmpId


        SELECT @RecordCount = @@ROWCOUNT


        SELECT * FROM #Results
        WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1


    end 

DROP TABLE #Results
end

或者如果你不想每次丟棄它,你應該嘗試類似的東西:

alter procedure GetRecords
    @Id int ,
    @status varchar(10),
    @EmpId int,
    @PageIndex INT = 1,
    @PageSize INT = 10,
    @RecordCount INT OUTPUT
as
begin
        CREATE TABLE #Results
    (
        RowNumber           INT,
        Id                  INT,    
        dDateTime           Datetime,
        Status              varchar(max),
        stage               varchar(max)
    )
        SET IDENTITY_INSERT #Results ON

    if(@Id = 1)
    begin 

        INSERT INTO #Results
        select ROW_NUMBER() OVER  (ORDER BY Id  desc)AS RowNumber,Id,dDateTime,[Status],Stage 
        from DiscrepencyMaster     where [Status]=@status

        SELECT @RecordCount = @@ROWCOUNT

        SELECT * FROM #Results
        WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
    end
    else if (@Id = 2)
    begin

        INSERT INTO #Results    
        select ROW_NUMBER() OVER  (ORDER BY Id  desc)AS RowNumber,Id,dDateTime,[Status],Stage 
        from DiscrepencyMaster where EmpId=@EmpId

        SELECT @RecordCount = @@ROWCOUNT

        SELECT * FROM #Results
        WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
    end 

DROP TABLE #Results
end

這將在腳本開始運行時創建表,並將其放在最后。 這些值將插入此已存在的表中。

begin
    IF OBJECT_ID('tempdb..#Results') IS NOT NULL
        DROP TABLE #Results
    CREATE TABLE #Results (rowNum INT, ID INT, status DateTime, stage ?) 
    if(@Id = 1)
    begin
        insert into #Results (rowNum, ID, status, stage)
        select ROW_NUMBER() OVER  (ORDER BY Id  desc) AS RowNumber
              , Id, dDateTime[Status], Stage 
          from DiscrepencyMaster     
         where [Status]=@status

        SELECT @RecordCount = COUNT(*)
        FROM #Results

        SELECT * FROM #Results
        WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
    end
    else if (@Id = 2)
    begin
        insert into #Results (rowNum, ID, status, stage)
        select ROW_NUMBER() OVER  (ORDER BY Id  desc)AS RowNumber,Id,dDateTime,[Status],Stage 
        from DiscrepencyMaster 
        where EmpId=@EmpId

        SELECT @RecordCount = COUNT(*)
        FROM #Results

        SELECT * FROM #Results
        WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
    end
    IF OBJECT_ID('tempdb..#Results') IS NOT NULL
        DROP TABLE #Results 
end

要么

insert into #Results (rowNum, ID, status, stage)
select ROW_NUMBER() OVER  (ORDER BY Id  desc) AS RowNumber
     , Id, dDateTime[Status], Stage 
  from DiscrepencyMaster     
 where (@Id = 1 and [Status]=@status) 
    or (@Id = 2 and EmpId=@EmpId)

更好

select count(*) 
  from DiscrepencyMaster     
 where (@Id = 1 and [Status]=@status)
    or (@Id = 2 and EmpId=@EmpId);
select Id, dDateTime[Status], Stage
  from DiscrepencyMaster     
 where (@Id = 1 and [Status]=@status)
    or (@Id = 2 and EmpId=@EmpId); 
 order by ID
OFFSET (@PageIndex -1) * @PageSize + 1 ROWS 
 FETCH NEXT @PageSize ROWS ONLY; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM