on 01-07-2010 9:41 PM
Estimados
Alguien sabe por que no se puede usar como condicion los campos de una tabla de usuario en una query?
Por ejemplo tengo esta:
<br>
-
SELECT T2.TransId, T0.RefDate, case when T2.TransType=30 then 'RD'
when T2.TransType=46 then 'PE'
when T2.TransType=24 then 'PR'
when T2.TransType=13 then 'FAC'
when T2.TransType=14 then 'NC'
when T2.TransType=25 then 'DEP'
when T2.TransType=18 then 'FP'
when T2.TransType=19 then 'NCP'
when T2.TransType=59 then 'EM'
when T2.TransType=20 then 'EMP'
when T2.TransType=69 then 'CI'
when T2.TransType=60 then 'SM'
when T2.TransType=67 then 'TS'
when T2.TransType=15 then 'GP'
when T2.TransType=58 then 'RD'
else T2.TransType end as [Tipo Doc.], T2.BaseRef, T0.Account,T1.FormatCode, T1.AcctName, T0.Debit, T0.Credit, T0.SYSDeb,T0.SYSCred,T0.FCDebit, T0.FCCredit, T0.FCCurrency, T0.DueDate, T0.LineMemo, T0.U_MMM_NumPers,T3.Name as Nombre, T5.[GroupName], 'C4' as C4, 'c5' as C5
FROM [dbo].[JDT1] T0
INNER JOIN [dbo].[OACT] T1 ON T0.Account = T1.AcctCode
INNER JOIN [dbo].[OJDT] T2 ON T0.TransId = T2.TransId
left JOIN [@MMM_NUMPERS] T3 ON T0.U_MMM_NumPers = T3.Code
left join OCRD T4 on (substring(T4.CardCode,1,8)=T0.U_MMM_NumPers or substring(T4.CardCode,1,7)=T0.U_MMM_NumPers)
left JOIN OCRG T5 ON T5.GroupCode = T4.GroupCode
WHERE ((T0.U_MMM_NumPers ='[%0]' and '[%0]'<>'') or '[%0]'='') and ((T1.FormatCode like '%%[%2]%%' and '[%2]'<>'') or '[%2]'='') and T0.RefDate between [%3] and [%4] and ((T5.[GroupName] ='[%5]' and '[%5]'<>'') or '[%5]'='') and T1.U_NPersona='Si'
order by T0.U_MMM_NumPers, T0.Debit, T0.Credit
-
<br>
Si trato de preguntar en el where por T3.Name=[%0], me arroja un error.
Todos los usuarios me reclaman que tiene que aprenderse los codigos y la verdad si son tablas grandes no tiene mucha gracia.
Alguien sabe como puede resolver esto?
Gracias
Edited by: Claudio Guerra on Jan 7, 2010 6:42 PM
Hola Claudio,
el código que puse es complicado, es una vista completa creada para
un cliente, que da un ejemplo completo.
Si tienes vistas simples, no vas a tener problemas con las
consultas. Este tipo de "errores" o funcionamiento no adecuado de
los parámetros se da cuando las vistas son "complicadas"...
Para tu consulta anterior se debería crear la vista de esta
forma:
/SELECT FROM [[dbo]].[[@MMM_NumPers]] T10/
DECLARE @Customer1 AS char(100)
/* WHERE */
SET @Customer1 = /* t10.Name */ '[[%0]]'
SELECT *
FROM [[dbo]].[[@MMM_NumPers]]
WHERE [[dbo]].[[@MMM_NumPers]].Name = @Customer1
O sea:
1) primero entre barras y asteriscos ponerle un alias a la tabla
/SELECT FROM [[dbo]].[[@MMM_NumPers]] T10/
2) declarar una variable (del tipo correcto)
DECLARE @Customer1 AS char(100)
3) el where entre barras y asteriscos
/* WHERE */
4) setear-direccionar-asignar a la variable el campo que corresponda
al parametro
SET @Customer1 = /* t10.Name */ '[[%0]]'
5) la consulta en si, utilizando el filtro que necesitamos.
SELECT *
FROM [[dbo]].[[@MMM_NumPers]]
WHERE [[dbo]].[[@MMM_NumPers]].Name = @Customer1
Espero sea de tu ayuda.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Es un format search, entonces debe de ser donde lo estas colocando en el query manager y tu usuario tiene permiso para ejecutar este query. será eso?.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Es un format search, entonces debe de ser donde lo estas colocando en el query manager y tu usuario tiene permiso para ejecutar este query. será eso?.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Buenas tardes Claudio, nosotros encontramos que en ciertas ocaciones las consultas no
funcionan en forma correcta y no por utiliizar tablas de usuario, sino cuando son "algo"
complicadas. Es como que no las puede resolver si existen parametros del tipo %.
Para solucionar esto utilizamos declaración de variables de la forma en que te paso en el
ejemplo de mas abajo.
Es algo complejo pero de esta forma funciona correctamente.
Un saludo y espero que te sea de utilidad.
DECLARE @Customer1 AS char(100)
/* WHERE */
SET @Customer1 = /* t10.CardCode */ '[%0]'
DECLARE @Customerf1 AS char(100)
/* WHERE */
SET @Customerf1 = /* t10.CardCode */ '[%1]'
DECLARE @desde AS datetime
/* WHERE */
SET @desde = /* t0.DocDate */ '[%2]'
DECLARE @hasta AS datetime
/* WHERE */
SET @hasta = /* t0.DocDate */ '[%3]'
DECLARE @FamDesde AS char(100)
/* WHERE */
SET @FamDesde = /* t11.Code */ '[%4]'
DECLARE @FamHasta AS char(100)
/* WHERE */
SET @FamHasta = /* t11.Code */ '[%5]'
DECLARE @MarcaDesde AS int
/* WHERE */
SET @MarcaDesde = /* t13.ItmsGrpCod */ '[%6]'
DECLARE @MarcaHasta AS int
/* WHERE */
SET @MarcaHasta = /* t13.ItmsGrpCod */ '[%7]'
select Codigo, Cliente, sum(Venta) as Venta, sum() as ,
sum() as , sum(Comision) as Comision, sum() as
from (
SELECT T0.CardCode as , T0.CardName as ,
sum(T1.U_FGIAGRIM) as , SUM(T1.GrssProfSC) AS ,
sum((T0.DiscPrcnt* T1.U_FGIAGRIM)/100) as ,
sum((T1.U_FGICOM* T1.U_FGIAGRIM)/100) as ,
sum(T1.GrssProfSC) -sum((T0.DiscPrcnt* T1.U_FGIAGRIM)/100)-sum((T1.U_FGICOM* T1.U_FGIAGRIM)/100) as
FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode
where (t0.CardCode >= @Customer1 or @Customer1 = '') and (t0.CardCode <= @Customerf1 or @Customerf1 = '') and
(t0.DocDate >= @desde or @desde = '') and (t0.DocDate <= @hasta or @hasta = '') and
(t2.U_FGIFAM >= @FamDesde or @FamDesde = '')and (t2.U_FGIFAM <= @FamHasta or @FamHasta = '') and
(t2.ItmsGrpCod >= @MarcaDesde or @MarcaDesde = '') and (t2.ItmsGrpCod <= @MarcaHasta or @MarcaHasta = '')
GROUP BY T0.CardCode, T0.CardName
union all
SELECT T0.CardCode as , T0.CardName as ,
-sum(T1.U_FGIAGRIM) as , -SUM(T1.GrssProfSC) AS ,
sum((T0.DiscPrcnt* T1.LineTotal)/100) as ,
-sum((T1.U_FGICOM* T1.U_FGIAGRIM)/100) as , -sum(T1.GrssProfSC)
-sum((T0.DiscPrcnt* T1.U_FGIAGRIM)/100)-sum((T1.U_FGICOM* T1.U_FGIAGRIM)/100) as
FROM ORIN T0 INNER JOIN RIN1 T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode
where (t0.CardCode >= @Customer1 or @Customer1 = '') and (t0.CardCode <= @Customerf1 or @Customerf1 = '') and
(t0.DocDate >= @desde or @desde = '') and (t0.DocDate <= @hasta or @hasta = '') and
(t2.U_FGIFAM >= @FamDesde or @FamDesde = '') and (t2.U_FGIFAM <= @FamHasta or @FamHasta = '') and
(t2.ItmsGrpCod >= @MarcaDesde or @MarcaDesde = '') and (t2.ItmsGrpCod <= @MarcaHasta or @MarcaHasta = '')
GROUP BY T0.CardCode, T0.CardName) as T10
group by Codigo, Cliente
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Nestor no entendi mucho el codigo que me pusiste.
Como llenas las variables declaradas?
Por ejemplo algo tan simple como esto
select TOP 1 @NumPers=T4.Code from [@MMM_NumPers] T4 where T4.Name='[%0]'
siendo [@MMM_NumPers] una tabla de usuario que solo tiene Code, Name y quiero que me muestre al filtrar los Nombres
Alquien sabe como hacerlo?
No entiendo porque no pueda funcionarte
este simple query lo corri para traer los proyectos por usuario de sbo que se tienen definidos en una tabla de usuarios
SELECT * FROM [dbo].[@TMP_PYT] T0 WHERE T0.[U_USER] =[%0]
Lo que si veo en el codigo del primer post, es que te faltan datos en el FROM , cuando se refiere a una tabla de usuario, por ejemplo el [dbo]. (punto)
Prueba meter asi el codigo, separando las tablas de usuario como lo puse aqui.
[dbo].[@tabla_de_usuario] T0
Que error te marca?? nosotros usamos muchas validaciones de tablas de usuario para busquedas formateadas, que error es?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
No sale ningun error claro. Muestra los tipicos mensajes sin sentido que tira cuando ejecutas la query, por ejemplo
<bR>
'Contratos de Servicios' OCRT
ese mensaje sale. No tiene nada que ver porque no se utiliza esa tabla
<BR>
En las consultas formateadas no es el problemas, si no que en las querys para informes del query manager.
User | Count |
---|---|
98 | |
12 | |
10 | |
6 | |
6 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.