krypto6969
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
Seth_C_Bauer
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…