No puedo usar tablas temporales, ¿en serio?

Un usuario Pregunto ✅

krypto6969

rr.png

Usando la importación directa al proceso almacenado que usa la tabla temporal … ¿obtiene este error? WTF?

Skotko

¿Es posible que esté utilizando modos de almacenamiento combinados (importación y consulta directa) en su informe? En mi experiencia con el uso mixto (uso powerapps para consultas directas), incluso las tablas que en realidad solo estoy importando tienen el botón de opción «consulta directa» predeterminado por algún motivo. Si es así, vuelva a cambiar el botón a ‘importar’ y ya no debería tener el problema. Acabo de probar mi problema (que es como llegué a este foro) y funcionó muy bien. La razón es que las consultas directas son muy limitadas en lo que pueden extraer.

fotobus

O el truco del analizador que aprendí previamente en SSIS…

SI 1 = 0

COMENZAR

SELECCIONE

‘ColumnDefinition1’ = CAST(NULL AS DATE), — columnas y tipos de datos en su conjunto de resultados final

‘ColumnDefinition2’ = CAST(NULL COMO NVARCHAR(75)) — etc.

FIN

/* Usa tablas temporales hasta que tu corazón esté contento */

/* Termine con un Select usando la misma definición que definió en la sección superior */

brazo extensible

En respuesta a fotobus

Sí, como ssis, tienes que darle un poco de ayuda.

rdurkin

¿Qué hay de usar un CTE en lugar de una tabla temporal? Sé que funciona en PowerBI.

Márquelo como una solución o dé un kudo si funciona para usted, de lo contrario, avíseme si se encuentra con un problema y haré todo lo posible para ayudarlo. Vaya a bipatterns.com para obtener más técnicas y guías de usuario.

Gracias,

ryan durkin

Waltheed

Debe definir explícitamente los tipos de datos para la tabla temporal.

Entonces debería funcionar.

krypto6969

En respuesta a Waltheed

Estoy bastante seguro de que estoy haciendo eso?

SET NOCOUNT ON
DECLARE	@CLAIMS int
DECLARE @from_date_entered	date
DECLARE @to_date_entered	date
----------------------------
SET @from_date_entered =  GETDATE() 
SET @to_date_entered	= GETDATE() 

--SET @from_date_entered = N'03/16/2016'
--SET @to_date_entered	= N'03/16/2016'
----------------------------
SELECT	@CLAIMS = batchtype_id
FROM	batchtype
WHERE	batchtype_ud = 'CLAIMS'

DECLARE @begin smalldatetime
SELECT @begin = CONVERT(smalldatetime, @from_date_entered)

DECLARE @end smalldatetime
SELECT @end = DATEADD (dd,1,CONVERT(smalldatetime, @to_date_entered))

DECLARE @begind smalldatetime
SELECT @begind = CONVERT(smalldatetime, @from_date_entered)

DECLARE @endd smalldatetime
SELECT @endd = CONVERT(smalldatetime, @to_date_entered)

DECLARE @CompanyName 	varchar(100)
SELECT 	@CompanyName = environment_info.company_name
FROM	environment_info


IF OBJECT_ID('tempdb..#rpt_data') IS NOT NULL
begin
        drop table #rpt_data
end
CREATE TABLE #rpt_data (CompanyName	varchar(100) 	NULL,
			Batch		char(3)		NULL,
			UserName	varchar(35)	NULL,
			SQLUserName	varchar (25)	NULL,
			claim_form_type_id	int	null, 
			Claim_type       varchar (10)   NULL,
			status_type	varchar(15)	NULL,
			each		int		NULL,
			member_last	varchar(35)	NULL,
			fromdate	smalldatetime	NULL,
			todate		smalldatetime	NULL)
			
INSERT INTO #rpt_data (	CompanyName,
			Batch,
			UserName,
			SQLUserName,
			claim_form_type_id,
			Claim_type,
			status_type,
			each,
			member_last,
			fromdate,
			todate )
			--countofentered as (select )


SELECT DISTINCT	@CompanyName,
	substring(batch_user.batch, 1, 3) as batch_init,
	batch_user.batch as user_name,
	batch_user.batch_sql_user_name,
	claim_form_type_id,--altered 11/25/02
	null,--altered 11/25/02
	claim_status.claim_status_ud,
	claim.claim_id,
	claim.member_last_name as member_last,
	@begind,
	@endd

FROM 	batch_user
	inner join batchtype
		on batch_user.batchtype_id = batchtype.batchtype_id,
	claim
	inner join claim_status
		on claim.claim_status_id = claim_status.claim_status_id
	
	
WHERE	len(batch_user.batch) = 3
	and substring(claim.claim_ud, 9, 3) = batch_user.batch
	and (claim.date_created < @end AND claim.date_created >= @begin)


GROUP BY  claim.claim_form_type_id, batch_user.batch_sql_user_name, batch_user.batch, claim_status.claim_status_ud, claim.member_last_name, claim.claim_id


INSERT INTO #rpt_data (	CompanyName,
			Batch,
			UserName, 
			SQLUserName,
			claim_form_type_id,
                       		Claim_type,
			status_type,
			each,
			member_last,
			fromdate,
			todate )

SELECT DISTINCT 	@CompanyName,
	substring(batch_user.batch, 1, 2) as batch_init,
	batch_user.batch as user_name,
	batch_user.batch_sql_user_name,
	claim_form_type_id,
	null,--altered
	claim_status.claim_status_ud,--altered
	claim.claim_id,
	claim.member_last_name as member_last,
	@begind,
	@endd

FROM 	batch_user
	inner join batchtype
		on batch_user.batchtype_id = batchtype.batchtype_id,
	claim
	inner join claim_status
		on claim.claim_status_id = claim_status.claim_status_id
	
	
WHERE	len(batch_user.batch) = 2
	and substring(claim.claim_ud, 9, 2) = batch_user.batch
	and (claim.date_created < @end AND claim.date_created >= @begin)


GROUP BY  claim.claim_form_type_id, batch_user.batch_sql_user_name, batch_user.batch, claim_status.claim_status_ud, claim.member_last_name,claim.claim_id



INSERT INTO #rpt_data (	CompanyName,
			Batch,
			UserName, 
			SQLUserName,
			claim_form_type_id,
                        		Claim_type,
			status_type,
			each,
			member_last,
			fromdate,
			todate )

SELECT DISTINCT	@CompanyName,
	substring(batch_user.batch, 1, 1) as batch_init,
	batch_user.batch as user_name,
	batch_user.batch_sql_user_name,
	null,--altered
	claim_status.claim_status_ud,--altered
	claim_status.claim_status_ud,
	claim.claim_id,
	claim.member_last_name as member_last,
	@begind,
	@endd

FROM 	batch_user
	inner join batchtype
		on batch_user.batchtype_id = batchtype.batchtype_id,
	claim
	inner join claim_status
		on claim.claim_status_id = claim_status.claim_status_id
	
	
WHERE	len(batch_user.batch) = 1
	and substring(claim.claim_ud, 9, 1) = batch_user.batch
	and (claim.date_created < @end AND claim.date_created >= @begin)
	

GROUP BY  claim.claim_form_type_id, batch_user.batch_sql_user_name, batch_user.batch, claim_status.claim_status_ud, claim.member_last_name,claim.claim_id

update #rpt_data
set claim_type="HCFA"
where (claim_form_type_id = 2 or claim_form_type_id is null)

update #rpt_data
set claim_type="UB92"
where (claim_form_type_id = 1)


  SELECT 
    CompanyName as Company, 
    Batch,
	USERNAME as [User Name],
	SQLUserName as [System User Name],
	--claim_form_type_id as [Claim Form Type],
	CASE WHEN [claim_form_type_id]  IS NULL  THEN ('N/A') END as [Claim Form Type],
	Claim_type as [Claim Type],--altered
	status_type as [Status Type],
	each as [Each],
	member_last as [Member Name],
	fromdate as [From Date],
	todate as [To Date],
  CASE WHEN [Status_Type] = 'Entered'  THEN 1 ELSE 0 END  AS Entered,
  CASE WHEN [Status_Type] = 'Approved' THEN 1 ELSE 0 END AS Approved,
 CASE WHEN [Status_Type] = 'Pending'  THEN 1 ELSE 0 END  AS Pending
  FROM #rpt_data

En respuesta a krypto6969

@ krypto6969 Podría intentar hacer que su lógica de inserción sea dinámica. Como ejemplo, he usado el script descrito en este blog para obtener métricas de SQL, por lo que sé que funciona. Pero lo más probable es que haga algo utilizando EXEC contra una variable o sp_executesql como aquí

O… Me acabo de dar cuenta de esto. Por alguna razón, si envuelve su Sproc en una variable, funciona. Así que solo crea un sproc para el siguiente código y puedes ejecutarlo así. (Solo importar, Consulta directa no funciona)

DECLARAR @sqlCommand varchar(1000)

SET @sqlCommand = ‘dbo.Testproc’
EJECUTIVO (@sqlCommand)

mattlazarus

En respuesta a Seth_C_Bauer

La opción SPROC me funcionó. Gracias 🙂

Mandr0id

En respuesta a Seth_C_Bauer

¿Qué pasa si usar SPROC no es una opción? donde queremos usar los datos de producción, sin embargo, por un período temporal para monitorear y hacer un caso de negocios.

Necesita usar tablas temporales para crear algunas métricas y seguir ejecutándolas durante unos días/semanas… no puede volcar todos los datos de producción a otros entornos. No desea crear/ejecutar trabajos para cargar las métricas en tablas reales. Si las tablas temporales se pueden usar, no hay más problema.

¿Alguien ha encontrado una buena solución sobre el uso de tablas temporales? Por favor, comparta…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *