我在SQL Server存储过程中使用了if else语句。
对于每个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
@@ROWCOUNT
。 - Nick.McDermaidSET @RecordCount = @@ROWCOUNT
替换SELECT @RecordCount = COUNT(*) FROM #Results
。这是一个好习惯...@@ROWCOUNT
始终包含上一条语句中受影响的记录数,这意味着您不必计算表中的记录数。 - Nick.McDermaidselect ... into #TempTable
时,你正在创建该表。根据文档,“如果在单个存储过程或批处理中创建了多个临时表,则它们必须具有不同的名称。” 因此,如果你要创建多个不同名称的临时表,你可以先创建表,然后使用insert into #TempTable ...
。注意不要改变原来的意思。 - Mikael Eriksson