[英]Unable to drop table from inside a stored procedure
我有一個存儲過程,每次從select into語句創建一個臨時表。
問題在於該過程在運行時會出現以下錯誤:
無法刪除表“ #Temp”,因為該表不存在或您沒有權限。
這僅在存儲過程中發生,當我在Management Studio中對其進行測試時,它工作正常。
我嘗試給運行該過程的帳戶指定db_owner角色,但沒有任何區別。
*我刪除了更改過程部分,這是我正在使用的代碼
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
如果要在存儲過程中創建本地臨時表(單號),則發生的情況是在存儲過程執行完后,它將刪除本地臨時表。 因此,如果您在執行存儲過程后嘗試刪除該表,該表將不再存在,因為它已被刪除。
如果需要在多個位置訪問表,請考慮使用全局臨時表(以##開頭)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.