Este dilema se puede solucionar de variadas maneras, pero te dejamos la que en nuestra opinión es la resolución más completa.
Solución:
Lo está soltando, luego lo crea y luego intenta crearlo nuevamente usando SELECT INTO
. Cambiar a:
DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
INSERT INTO #TMPGUARDIAN
SELECT LAST_NAME,FRST_NAME
FROM TBL_PEOPLE
En MS SQL Server puede crear una tabla sin un CREATE TABLE
declaración usando SELECT INTO
Por lo general, coloco estas líneas al comienzo de mi procedimiento almacenado y luego al final.
Es una verificación de “existe” para las tablas #temp.
IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
begin
drop table #MyCoolTempTable
end
Ejemplo completo:
CREATE PROCEDURE [dbo].[uspTempTableSuperSafeExample]
AS
BEGIN
SET NOCOUNT ON;
IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
BEGIN
DROP TABLE #MyCoolTempTable
END
CREATE TABLE #MyCoolTempTable (
MyCoolTempTableKey INT IDENTITY(1,1),
MyValue VARCHAR(128)
)
INSERT INTO #MyCoolTempTable (MyValue)
SELECT LEFT(@@VERSION, 128)
UNION ALL SELECT TOP 10 LEFT(name, 128) from sysobjects
SELECT MyCoolTempTableKey, MyValue FROM #MyCoolTempTable
IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
BEGIN
DROP TABLE #MyCoolTempTable
END
SET NOCOUNT OFF;
END
GO
Debes modificar la consulta así
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
INSERT INTO #TMPGUARDIAN(FRST_NAME,LAST_NAME)
SELECT LAST_NAME,FRST_NAME FROM TBL_PEOPLE
— Realice una última sesión para borrar todas las tablas temporales. siempre cae al final. En su caso, a veces, puede ocurrir un error si la tabla no existe, mientras intenta eliminarla.
DROP TABLE #TMPGUARDIAN
Evite usar insertar en
Porque si está utilizando insertar en el futuro, si desea modificar la tabla temporal agregando una nueva columna que se puede completar después de algún proceso (no junto con la inserción). En ese momento, debe volver a trabajar y diseñarlo de la misma manera.
Usar variable de tabla http://odetocode.com/articles/365.aspx
declare @userData TABLE(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30)
)
Ventajas
No se necesitan instrucciones Drop, ya que esto será similar a las variables. El alcance finaliza inmediatamente después de la ejecución.