Dip*_*agh 5 sql t-sql sql-server temp-tables
我在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
Run Code Online (Sandbox Code Playgroud)
这对你有用吗?
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
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想每次都删除它,您应该尝试类似的操作:
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
Run Code Online (Sandbox Code Playgroud)
这将在脚本开始运行时创建表,并在结束时删除它。这些值将被插入到这个已经存在的表中。
| 归档时间: |
|
| 查看次数: |
369 次 |
| 最近记录: |