![]() |
Crear SubConsulta en Sql con datos desde Tabla
Saludos a Todos:
Estoy tratando de crear una subconsulta donde los campos y la tabla estan alojados en una tabla de configuracion. Tengo varios tipos de clientes que sus datos estan en tablas diferentes, pero cuando hago por ejemplo un recibo de ingreso elijo el tipo de cliente y la tabla de sus datos. la tabla de Configuracion contiene el Tipo de Cliente, la base de datos y el campo de nombre de cliente almacenado. el Qry es el siguiente: Select a.Reci_Numero, a.Tipo_Codigo, a.Clte_Codigo, '( Select ' + rtrim(b.clte_descripcion) + ' from ' + rtrim(b.Clte_Database)+ ')' as Clte_Descripcion From Recibos_Ingresos a INNER JOIN Tabla_Tipos_Clientes b ON a.Tipo_Codigo = b.Tipo_Codigo Donde b.CLTE_DESCRIPCION = 'CLTE_NOMBRES' o 'MDCO_NOMBRES' y b.CLTE_DATABASE = 'DB_INVENTARIOS.DBO.TABLA_DE_CLIENTES' o 'DB_CONSULTORIO.DBO.TABLA_DE_MEDICOS' El resultado es el siguiente: 1063, 2, 4, ( SELECT MDCO_NOMBRES from DB_CONSULTORIO.DBO.TABLA_MEDICOS) En lugar de: 1063, 2, 4, DR. LEONARDO ROSARIO Estoy usando SQL Server 2000 Windows Vista Gracias. |
la única opción que se me viene a la mente es utilizar una consulta dinámica con un procedimiento almacenado....
The Curse and Blessings of Dynamic SQL SQL Stored Procedure - update column/table names via variable |
Gracias ContraVeneno, probare en los link A ver si puedo lograr algo.
|
Es normal que te devuelva eso, estás pasando un literal, la select está entrecomillada.
Puedes hacer una cosa: Una función Select a.Reci_Numero, a.Tipo_Codigo, a.Clte_Codigo, FUNCIONNOMBRE(b.clte_descripcion,b.Clte_Database) as Clte_Descripcion From Recibos_Ingresos a INNER JOIN Tabla_Tipos_Clientes b ON a.Tipo_Codigo = b.Tipo_Codigo siendo la funcion quien te devuelva el valor que obtiene (b.clte_descripcion) la select. Ahora, creo que te falta una pieza, que es el código del cliente (a.Clte_Codigo), ya que entiendo que dependerá el valor de lo que devuelva del valor del código. quedaría así la select modificada Select a.Reci_Numero, a.Tipo_Codigo, a.Clte_Codigo, FUNCIONNOMBRE(a.Clte_Codigo, b.clte_descripcion,b.Clte_Database) as Clte_Descripcion From Recibos_Ingresos a INNER JOIN Tabla_Tipos_Clientes b ON a.Tipo_Codigo = b.Tipo_Codigo siendo la función la que monte la select SELECT b.clte_descripcion FROM b.Clte_Database WHERE IDCLIENTE = a.Clte_Codigo y devuelva el dato. Nos cuentas. Saludos |
Gracias por Contestar fjcg02, Hice mas o menos lo siguiente, pero me devuelve lo mismo:
CREATE FUNCTION BuscaCliente(@Clte_Codigo Integer, @Clte_Campo VarChar(40), @Clte_Database VarChar(40), @Tipo_Codigo Integer ) RETURNS VarChar(150) as BEGIN declare @Clte_Nombre as varchar(150) set @Clte_Nombre = ( Select ( ' Select ' + Rtrim(Clte_Descripcion) + ' From ' + Rtrim(Clte_Database) + ' Where ' + Rtrim(Clte_Codigo) + ' = ' + Cast( Clte_Codigo as Char(10))) From Tabla_Tipos_Clientes Where Tipo_Codigo = @Tipo_Codigo ) return @Clte_nombre end Select a.Reci_Numero, a.Tipo_Codigo, a.Clte_Codigo, dbo.BuscaCliente(a.Clte_Codigo, b.clte_descripcion, b.Clte_Database, b.Tipo_Codigo) as Clte_Descripcion From Recibos_Ingresos a INNER JOIN Tabla_Tipos_Clientes b ON a.Tipo_Codigo = b.Tipo_Codigo No se si estoy haciendo algo mal. |
Hola,
no se SQL Server, pero basándome en lo que escribes, podría ser lo siguiente
Se supone que la select sólo devuelve un valor, por supuesto. Saludos |
Aqui se produce un error:
Select @Clte_nombre=@Clte_Descripcion From @Clte_Database Where @Clte_Codigo =@Clte_Codigo From Tabla_Tipos_Clientes Where Tipo_Codigo = @Tipo_Codigo Server: Msg 170, Level 15, State 1, Procedure BuscaCliente, Line 9 Line 9: Incorrect syntax near '='. |
No sé tanto SQLServer como para darte la unción hecha, y tampoco tengo ejemplos para mirar.
Podría ser que @Clte_nombre y @Clte_Descripcion no son del mismo tipo ( VARCHAR (150) ), aunque no estoy seguro. En Firebird la función es clara, se hace la SELECT campo from tabla where condicion INTO campo y la variable campo se devuelve. Mira a ver si encuentras información en la web. Saludos |
Hola,
me he dado cuenta de que está mal escrita la SELECT. tiene dos FROM, por lo que no creo que el parser del SQLServer lo trague. Tendrás que poner algo parrecido a esto Supongo que será
Primero haz que te funcione la SELECT y luego vete poniendo parámetros. Espero que te sirva. Saludos |
La franja horaria es GMT +2. Ahora son las 13:01:06. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi