Asp.net 无法从存储过程中删除表
我有一个存储过程,每次从select into语句创建一个临时表 问题在于,该过程在运行时会出现以下错误: 无法删除表“Temp”,因为它不存在或您没有权限 这只发生在存储过程中,当我在ManagementStudio中测试它时,它工作得很好 我曾尝试将运行该过程的帐户指定为db_所有者角色,但没有任何区别 *我已经删除了ALTERPROCEDURE部分,这是我在中使用的代码Asp.net 无法从存储过程中删除表,asp.net,sql,stored-procedures,ssms,Asp.net,Sql,Stored Procedures,Ssms,我有一个存储过程,每次从select into语句创建一个临时表 问题在于,该过程在运行时会出现以下错误: 无法删除表“Temp”,因为它不存在或您没有权限 这只发生在存储过程中,当我在ManagementStudio中测试它时,它工作得很好 我曾尝试将运行该过程的帐户指定为db_所有者角色,但没有任何区别 *我已经删除了ALTERPROCEDURE部分,这是我在中使用的代码 USE [DBName] GO /****** Object: StoredProcedure [dbo].[P
USE [DBName]
GO
/****** Object: StoredProcedure [dbo].[PL_Vehicles_Search] Script Date: 25/06/2014 14:52:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Stored Procedure
-- Description:
-- Version:
-- ModifiedBy:
-- Date Modified:
-- =============================================
ALTER PROCEDURE [dbo].[PL_Vehicles_Search]
@PageSize INT = 10 ,
@CurrentPage INT = 1 ,
@SortExpression NVARCHAR(MAX) = 'RegNumber' ,
@SearchText NVARCHAR(250) = '' ,
@SearchSite NVARCHAR(1) = '1'
AS
BEGIN
SET @PageSize = 10
SET @CurrentPage = 1
SET @SortExpression = 'RegNumber'
SET @SearchText = ''
SET @SearchSite = '1'
DECLARE @PageID INT
SET @PageID = 245
DECLARE @Cols VARCHAR(max)
DECLARE @sqlstring NVARCHAR(MAX)
DECLARE @UpperBand INT
DECLARE @LowerBand INT
DECLARE @RealCol NVARCHAR(MAX)
SET @LowerBand = ( @CurrentPage - 1 ) * @PageSize
SET @UpperBand = ( @CurrentPage * @PageSize ) + 1
IF EXISTS ( SELECT [name]
FROM tempdb.sys.tables
WHERE [name] LIKE '#Temp%' )
BEGIN
DROP TABLE #Temp;
END
--DATA
SELECT V.VehID,
V.RegNumber,
V.FleetNumber,
VT.VehTypeCode,
VT.[Description] AS 'VehTypeDesc',
V.Driver,
V.VehicleConfirmed
,ROW_NUMBER() OVER (Order By @SortExpression ) As RowNumber
INTO #Temp
FROM dbo.Vehicles V
INNER JOIN dbo.VehicleTypes VT
ON V.VehicleTypeID = VT.ID
WHERE (@SearchText = '' OR V.RegNumber LIKE '%' + @SearchText + '%')
-- SELECT *
--FROM #Temp
EXEC dbo.PL_GetColumns @PageID, @Cols OUTPUT
--END
--DATA
SET @sqlstring = 'SELECT ' + @Cols + ' FROM #Temp WHERE ROWNUMBER > '
+ CONVERT(VARCHAR, @LowerBand) + ' AND ROWNUMBER < '
+ CONVERT(VARCHAR, @UpperBand) + ' ORDER BY #Temp.'
+ @SortExpression + ''
EXEC sp_executesql @sqlstring
SELECT [Text]
FROM dbo.CustomerLocalizationColumns CLC
INNER JOIN Portal.dbo.[Columns] C ON CLC.ColumnID = C.ID
WHERE C.PageID = @PageID
END
如果要在存储过程中创建本地临时表single,则在存储过程完成执行后,它会删除本地临时表。因此,如果在执行存储过程后尝试删除该表,该表将不再存在,因为它已经被删除
如果您需要在多个位置访问表,请考虑从开始使用全局临时表。您只是一针见血。我没有意识到SP会删除本地表,所以我所要做的就是删除我的drop table命令。