[英]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.