none
correspondencia de id entre dos tablas relacionadas RRS feed

  • Pregunta

  • Que tal amigos buenas tardes !

    Me encuentro aqui molestandolos de nuevo para un requerimiento que se ve simple pero no se como hacerlo se los comento:

    Tengo dos tablas en una aplicacion para replicar una base de datos con dos tablas una de 20 clientes y otra de 250 consumidores, la relacion es que por cada cliente hay un cierto numero de consumidores ejemplo el cliente 3 tiene 40 consumidores es una relacion uno a muchos.

    Ahora bien, cada vez que replico la tabla quiero que los id de los clientes que aparecen en mi tabla de clientes como van cambiando quiero que tambien se respeten en la tabla de consumidores ejemplo: tengo  el id 5 de la tabla de clientes, cuando lo replice una segunda vez cambiara a ser el 15, si le doy otra vez sera el 25 y asi sucesivamente, el hecho es que yo quiero que tambien aparezca ese id en mi tabla de consumidores por ejemplo los consumidores que perentencen al cliente 5 si se replica la  base ahora tienen que aparecer como 15, y si se vuelve a replicar sera el 25 etc... espero haberme explicado.

    ¿ que tengo que ingresar en mi linea de codigo de mis stored procedures para que se respete la regla ?

    Les paso mis scripts

    tabla clientes

    CREATE TABLE [dbo].[Clientes](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [RFC] [varchar](16) NULL,
        [Nombre] [varchar](100) NULL,
        [Calle] [varchar](200) NULL,
        [Num] [varchar](10) NULL,
        [NumI] [varchar](20) NULL,
        [Colonia] [varchar](100) NULL,
        [Delegacion] [int] NULL,
        [CP] [varchar](5) NULL,
        [Estado] [int] NULL,
        [Pais] [varchar](40) NULL,
        [Telefono] [varchar](10) NULL,
        [Email] [varchar](100) NULL,
        [TipoC] [varchar](20) NULL
    ) ON [PRIMARY]

    GO

    tabla consumidores

    CREATE TABLE [dbo].[Consumidores](
        [id] [int] NOT NULL,
        [idCliente] [int] NULL,
        [Nombre] [nvarchar](100) NULL,
        [Unidad] [nvarchar](50) NULL,
        [Marca] [varchar](50) NULL,
        [CONS_NIP] [nvarchar](8) NULL,
        [NoTarjeta] [nvarchar](20) NULL,
        [EstadoInicial] [nvarchar](20) NULL,
        [Restriccion] [nvarchar](10) NULL,
        [UsoLunes] [nvarchar](2) NULL,
        [UsoMartes] [nvarchar](2) NULL,
        [UsoMiercoles] [nvarchar](2) NULL,
        [UsoJueves] [nvarchar](2) NULL,
        [UsoViernes] [nvarchar](2) NULL,
        [UsoSabado] [nvarchar](2) NULL,
        [UsoDomingo] [nvarchar](2) NULL,
        [CONS_COMB] [nvarchar](30) NULL,
        [PTiempo] [varchar](4) NULL,
        [CreditoLimiteParcial] [float] NULL,
        [PersonaAgrego] [nvarchar](100) NULL,
        [ultimacarga] [nvarchar](20) NULL,
        [Num_Uso_Premia] [int] NULL,
        [Puntos] [int] NULL,
        [T_Emitida] [bit] NULL,
        [Km_A] [varchar](10) NULL,
        [Km] [varchar](10) NULL
    ) ON [PRIMARY]

    GO

    mi stored procedure para insertar clientes

    CREATE PROCEDURE [dbo].[spi_cliente]
    (
    @RFC VARCHAR(16),
    @Nombre varchar(100),
    @Calle varchar(200),
    @Num varchar(10),
    @NumI varchar(20),
    @Colonia varchar(100),
    @Delegacion int,
    @CP varchar(5),
    @Estado int,
    @Pais varchar(40),
    @Telefono varchar(10),
    @Email varchar(100),
    @TipoC varchar(20)
    )
    AS
    BEGIN
    INSERT INTO CLIENTES (RFC, Nombre, Calle, Num, NumI, Colonia, Delegacion,
    CP, Estado, Pais, Telefono, Email, TipoC)
    VALUES (@RFC, @Nombre, @Calle, @Num, @NumI, @Colonia, @Delegacion, @CP, @Estado,
    @Pais,@Telefono, @Email, 'Contado')
    END


    mi stored procedure para agregar consumidores

    CREATE PROCEDURE [dbo].[AGREGAR_CONSUMIDORES5]
    (
      @idCliente int,
      @Nombre nvarchar(100),
      @Unidad nvarchar(50),
      @Marca varchar(50),
      @CONS_NIP nvarchar(8),
      @NoTarjeta nvarchar(20),
      @EstadoInicial nvarchar(20),
      @Restriccion varchar (10),
      @Lunes varchar(2),
      @Martes varchar(2),
      @Miercoles varchar(2),
      @Jueves varchar(2),
      @Viernes varchar(2),
      @Sabado varchar(2),
      @Domingo varchar(2),
      @CONS_COMB varchar (30),
      @PTiempo varchar (4),
      @CreditoLimiteParcial float,
      @PersonaAgrego nvarchar(100),
      @ultimacarga nvarchar(20),
      @Num_Uso_Premia int,
      @Puntos int,
      @T_Emitida bit,
      @Km_A varchar(10),
      @Km varchar(10),
      @rfc varchar(16)
    )
    AS
    BEGIN
      DECLARE @query varchar(4000);
      DECLARE @Campos varchar(4000);
      DECLARE @id int
      DECLARE @numest varchar(6);
      DECLARE @idclientereal int;


      SELECT @id = isnull ( MAX(id),0) + 1 from Consumidores
      SET @idclientereal = (select top 1 clientes.id from clientes  where clientes.rfc = @rfc);
      --SELECT @id = MAX (isnull (id, 0)) + 1 from Consumidores
      --SELECT @numest = MAX (NUM_EST) + 1 from Variables
       
      SET @query = '';
      SET @Campos = '';
     
     
    if (LEN(@Nombre) = 0)
      BEGIN
         SET @Campos = @Campos + 'Nombre';
      END

    if (LEN(@Unidad) = 0)
      BEGIN
         SET @Campos = @Campos + 'Unidad';
      END

    if (LEN(@Marca) = 0)
      BEGIN
         SET @Campos = @Campos + 'Marca';
      END

    if (LEN(@NoTarjeta) = 0)
      BEGIN
         SET @Campos = @Campos + 'NoTarjeta';
      END

    if (LEN(@EstadoInicial) = 0)
      BEGIN
         SET @Campos = @Campos + 'EstadoInicial';
      END

    if (LEN(@Lunes) = 0)
      BEGIN
         SET @Campos = @Campos + 'Lunes';
      END

    if (LEN(@Martes) = 0)
      BEGIN
         SET @Campos = @Campos + 'Martes';
      END

    if (LEN(@Miercoles) = 0)
      BEGIN
         SET @Campos = @Campos + 'Miercoles';
      END

    if (LEN(@Jueves) = 0)
      BEGIN
         SET @Campos = @Campos + 'Jueves';
      END

    if (LEN(@Viernes) = 0)
      BEGIN
         SET @Campos = @Campos + 'Viernes';
      END

    if (LEN(@Sabado) = 0)
      BEGIN
         SET @Campos = @Campos + 'Sabado';
      END

    if (LEN(@Domingo) = 0)
      BEGIN
         SET @Campos = @Campos + 'Domingo';
      END

    if (LEN(@Restriccion) = 0)
      BEGIN
         SET @Campos = @Campos + 'Restriccion';
      END

    if (LEN(@CONS_COMB) = 0)
      BEGIN
         SET @Campos = @Campos + 'CONS_COMB';
      END

    if (LEN(@PTiempo) = 0)
      BEGIN
         SET @Campos = @Campos + 'PTiempo';
      END
     
    if (LEN(@CreditoLimiteParcial) = 0)
      BEGIN
         SET @Campos = @Campos + 'CreditoLimiteParcial';
      END
    if (@idCliente != 15)
    BEGIN
      SET @query = '';
      SET @query = @query + 'INSERT INTO CONSUMIDORES ';
      SET @query = @query + 'VALUES  (';
      SET @query = @query + LTRIM(RTRIM(@id)) + ', ';
      SET @query = @query + LTRIM(RTRIM(@idCliente)) + ', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Nombre)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Unidad)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Marca)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@CONS_NIP)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@NoTarjeta)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@EstadoInicial)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Restriccion)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Lunes)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Martes)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Miercoles)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Jueves)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Viernes)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Sabado)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Domingo)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@CONS_COMB)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@PTiempo)) + ''', ';
      SET @query = @query + LTRIM(RTRIM(@CreditoLimiteParcial)) + ', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@PersonaAgrego)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@ultimacarga)) + ''', ';
      SET @query = @query + LTRIM(RTRIM(@Num_Uso_Premia)) + ', ';
      SET @query = @query + LTRIM(RTRIM(@Puntos)) + ', ';
      SET @query = @query + LTRIM(RTRIM(@T_Emitida)) + ', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Km_A)) + ''', ';
      SET @query = @query + '''' + LTRIM(RTRIM(@Km)) + ''');';
      PRINT(@query)
      EXEC(@query)
      PRINT(@@ERROR)
      END

    END

    Les agradecere mucho su ayuda me super urge.

    Muchas gracias de antemano.

    Saludos.

    miércoles, 3 de septiembre de 2014 22:00

Respuestas

  • Genial, ya voy endendiendo más o menos lo que necesitas. Básicamente se trata de añadir a las tablas de destino toda la información de las tablas de origen a petición, es decir, cuando alguien lo decida. Sin eliminar ni actualizar lo que ya hay en las tablas de destino y de manera que no se pierda la relación en la copia de los datos. ¿Voy bien?

    Pero yo aún voy más allá, también sería conveniente poder relacionar el origen de los datos con los datos de destino, es decir, si ha habido 10 replicaciones (mejor lo llamaremos copias), saber qué diez registros de la tabla de destino corresponden a un determinado cliente en la tabla de origen.

    Yo lo haría de la siguiente manera. Primero tendría una tabla Copias:

    CREATE TABLE Copias
    (
       IdCopia int IDENTITY(1,1) PRIMARY KEY,
       FechaCopia datetime not null,
       RealizadorDeLaCopia varchar(128) NOT NULL
    )

    En esta tabla tendría un registro por cada copia que se hiciera, con la fecha de realización de la copia, y la persona que hizo la copia. Esto nos da información de seguimiento de las copias.

    Luego las tablas de destino tendrán un campo IdCopia más los mismos campos que la tablas de origen, sin autonuméricos, los mismos campos con los mismos tipos de datos y la misma nulabilidad:

    Estas serían las tablas de destino.

    CREATE TABLE Clientes
    (
      IdCopia int NOT NULL,
      Id int NOT NULL, -- este es el id cliente, con el mismo valor que en la tabla de orgien
      -- Resto de los campos de clientes
    );
    
    CREATE TABLE Consumidores
    (
      IdCopia int NOT NULL,
      IdCliente, -- el mismo idcliente que en la tabla de origen,
      Id int NOT NULL, el id del consumidor, con el mismo valor que en la tabla de origen
      -- Resto de los campos de consumidores
    )

    Luego tendría un procedimiento almacenado que haría una copia de golpe y porrazo. Este procedimiento está en la base de datos de origen:

    CREATE PROCEDURE CrearCopia
       @RealizadorDeLaCopia varchar(128)
    AS
       DECLARE @IdCopia int
       INSERT INTO Copias(FechaCopia, RealizadorDeLaCopia)
       VALUES (GETDATE(), @RealizadorDeLaCopia)
    
       SET @IdCopia = SCOPE_IDENTITY()
    
       INSERT INTO BaseDatosDestino.dbo.Clientes
       SELECT
         @IdCopia, C.*
       FROM 
         dbo.Clientes C
    
       INSERT INTO BaseDatosDestino.dbo.Consumidores
       SELECT
         @IdCopia, C.*
       FROM
         dbo.Consumidores C
    
       SELECT @IdCopia AS IdCopia

    Y ya está. ¿Qué te parece?

    Mantenemos las relaciones en destino, los consumidores del cliente @IdCliente, de la copia @IdCopia son los siguientes; SELECT * FROM Consumidores WHERE IdCliente = @IdCliente AND IdCopia = @IdCopia

    Y mantenemos una relación entre los datos de origen y de destino, además de saber cuantas copias se ha hecho, cuando y por quien.


    Jesús López
    EntityLite: A Lightweight, Database First, Micro ORM

    jueves, 4 de septiembre de 2014 22:32
  • No es posible quitarle la propiedad identity a una columna, tienes que eliminarla y volverla a crear. Con el diseñador puede hacerse siempre que tengas desmarcada la opción "Prevent saving changes that require table-recreation", en el menú "Options"->"Designers"->"Table and Database designers"

    Jesús López
    EntityLite: A Lightweight, Database First, Micro ORM

    lunes, 8 de septiembre de 2014 5:20

Todas las respuestas

  • Hola no entiendo muy bien lo que quieres hacer. xq necesitas que los IDs de clientes salten de 10 en 10? o sea de 5 pasa a 15 y despues a 25? a que te refieres con "replicar"? no veo que tengas ningun procedimiento que tome los datos de tus tablas origen y los ponga en el destino,solo veo inserts comunes. Si puedes dar mas detalles de tu problema quizas podamos sugerirte alguna cosa mejor

    saludos


    Juan Pablo Burgos

    jueves, 4 de septiembre de 2014 4:32
  • Hola Juan Pablo buenos dias !

    Antes que nada muchas gracias por contestarme, y efectivamente lo que deseo es que cada vez que se repliquen mis bases de datos los IDs clientes logicamente van a cambiar de 10 en 10, al mismo tiempo los idClientes de la tabla consumidores tienen que cambiar por cada replicacion, es decir que lo que quiero que siempre se respete la correspondencia entre esas dos tablas.

    Al hablar de replicar me refiero a transferir los datos de las tablas de una base a otra y logico en la de destino se van a duplicar los registros por cada replicacion que yo haga en mi formulario.

    Esto es simplemente para que cada vez que un usuario replique la base de datos se respete la correspondencia y no se pierda, porque con los stored procedures que te muestro lo que sucede es que la tabla de clientes si cambia sus IDs, lo que no pasa en la tabla de consumidores ya que ahi siguen sin cambiar los idClientes de cada consumidor, por ejemplo si replico los ids del cliente 1 siempre son uno en consumidores y no es lo que deseo.

    Con el stored procedure que tengo para insertar clientes  y que es spi_clientes, con el si logro tomar los datos del origen de clientes para insertarlos en el destino y si aparecen, lo mismo que con los consumidores y los dos stored procedures los tengo tanto en el origen como en el destino.

    Y bueno mi problema sigue siendo el mismo ¿ como logro que se respete la correspondencia de que los ids tambien cambien en la tabla de consumidores y no solo en la de clientes ?

    Espero haberme explicado mejor.

    De antemano te agradezco mucho tu ayuda.

    Saludos




    • Editado ARMANDO DAZA jueves, 4 de septiembre de 2014 16:19
    jueves, 4 de septiembre de 2014 14:34
  • El problema que tengo con tu pregunta es que yo no soy capaz de encontrarle el sentido a bastantes cosas que nos cuentas. Y por tanto me resulta muy difícil dar una respuesta válida.

    En vez de contarnos como lo quieres hacer, por qué no pruebas a contarnos qué quieres conseguir al final, desde el punto de vista de las operaciones del negocio sin entrar en detalles técnicos, ya te propondremos nosotros una solución técnica. Imagina que eres un usario que no tiene ni idea de SQL Server y le tienes que contar al programador que quieres una funcionalidad nueva en tu aplicación.

    ¿Por qué tienen que repetirse los registros? ¿De qué sirve tener información duplicada? Normalmente eso sólo provoca problemas.

    ¿Por qué a cada nueva replicación le sumas diez al id? ¿Y si cuando estás replicando el 5 por segunda vez ya hay un 15 ?

    Por favor intenta ser lo más preciso y completo que puedas en tus explicación. 

    -


    Jesús López
    EntityLite: A Lightweight, Database First, Micro ORM


    jueves, 4 de septiembre de 2014 16:12
  • De acuerdo con jesus. Danos una visión mas de negocio del problema/necesidad que quieres cubrir. Saludos

    Juan Pablo Burgos

    jueves, 4 de septiembre de 2014 17:18
  • Que tal amigos jesus y juan pablo gracias por responderme.

    Lo que deseo es lo que ya he comentado lineas arriba, de hecho son los requerimientos que me solicitan no es una idea mia, solo trato de cubrir el requerimiento y es para una simple aplicacion de replicacion en windows forms con esa funcionalidad es todo lo que necesito, se que quizas no les parezca muy util o logico por la duplicidad de datos.

    Disculpen la insistencia pero asi me fue solicitada la funcionalidad.

    Saludos y espero sus respuestas

    Gracias



    • Editado ARMANDO DAZA jueves, 4 de septiembre de 2014 17:49
    jueves, 4 de septiembre de 2014 17:35
  • @Armando,

    Con la información que nos has dado no vamos a poder ayudarte. 

    Cuéntanos cual es exáctamente la funcionalidad que te han pedido. ¿Lo de que vayan los id's de 10 en diez es un requisito que te han pedido? ¿o es algo que has pensado tú?

    Me imagino que te habrán dicho algo como. El usuario podrá elegir hacer una replicación cuando quiera, eso significa que ... ¿qué es lo que significa? ¿Cómo va a consultar luego los datos replicados? ¿La replicación consiste en sólo inserción o también en actualización y eliminación? ¿Qué pasa con los datos de las antiguas replicaciones? ¿Se quedan allí y ya no se usan? ¿Se pueden consultar? Cada vez que se hace una replicacion ¿qué datos se replican? ¿Los seleccionados por un usuario? ¿Toda la tabla? ¿Sólo los clientes? ¿También los consumidores?

    Como puedes ver hay montones de lagunas en la especificación que has expuesto. Sin una especificación precisa y completa no te vamos a poder ayudar. Así que tú verás lo que haces. Tenemos todo el interés del mundo en ayudarte, pero tú tienes que ser el primero en colaborar.

    Lo que no podemos hacer es pedirle a quien te ha encargado la funcionalidad que nos dé los detalles.


    Jesús López
    EntityLite: A Lightweight, Database First, Micro ORM


    jueves, 4 de septiembre de 2014 19:38
  • Que tal jesus gracias por responder y por tu disponibilidad para apoyarme.

    Creo que ya me entendiste, efectivamente el usuario podrá replicar cuando él lo deseé, pero el no consultará los datos replicados.

    La replicación es sólo para insertar, no habrá actualización ni  eliminación.

    Los datos de las primeras replicaciones permanecerán en las tablas, y con cada replicación se incrementarán los registros en clientes y consumidores, pero los registros de cada replicación seguirán en las tablas.

    El único que podrá consultar las tablas será el desarrollador o el dba, no es para usuarios que no conozcan nada del sistema.

    Lo que se replicará en cada consulta son todos los datos de ambas tablas (clientes y consumidores).

    Ahora pondré otro ejemplo: mi base origen está con los datos llenos en las tablas de clientes y consumidores, pero en el destino están vacías.

    En la tabla cliente tengo 20 registros en total, si replico por primera vez al destino como esta vacia la tabla de clientes destino tendrá después de ser replicada los 20 registros del origen, vamos bien ?

    Ahora hago una segunda replicación que pasa con el id 1 ? pues se convertirá ahora en el 21 porque aumenta de 20 en 20.

    La tabla de consumidores tiene 365 registros en el origen, la replico por primera vez en el destino que tiene esa misma tabla vacía y se llena con esos 365 registros.

    La replico por segunda vez y ahora consumidores tendrá 730 registros, y que tiene que suceder ? que los idclientes de los consumidores que pertencen al id 1 ahora deben ser 21 correcto ? y esto es precisamente lo que requiero.

    Creo que con lo que me comentas esta más claro el asunto.

    Muchas gracias nuevamente por tu respuesta.

    Saludos




    • Editado ARMANDO DAZA jueves, 4 de septiembre de 2014 21:41
    jueves, 4 de septiembre de 2014 21:28
  • Yo tampoco entiendo que regla de negocio puede llevarte a crear semejante lógica, que parece tan sin sentido.

    Obviando eso y viendo tu query, para que usar SQL Dinamico? y cual es la finalidad de la variable @Campos? si nunca la lees?

    No estoy seguro de haber entendido correctamente que necesitas, pero esto que intentas hacer, sea lo que sea pareciera ser más sencillo hacer un insert into select comun, y en el valor del ID obtenido le sumas 10 y listo.

    O me pierdo de algo más?

    jueves, 4 de septiembre de 2014 21:38
  • Genial, ya voy endendiendo más o menos lo que necesitas. Básicamente se trata de añadir a las tablas de destino toda la información de las tablas de origen a petición, es decir, cuando alguien lo decida. Sin eliminar ni actualizar lo que ya hay en las tablas de destino y de manera que no se pierda la relación en la copia de los datos. ¿Voy bien?

    Pero yo aún voy más allá, también sería conveniente poder relacionar el origen de los datos con los datos de destino, es decir, si ha habido 10 replicaciones (mejor lo llamaremos copias), saber qué diez registros de la tabla de destino corresponden a un determinado cliente en la tabla de origen.

    Yo lo haría de la siguiente manera. Primero tendría una tabla Copias:

    CREATE TABLE Copias
    (
       IdCopia int IDENTITY(1,1) PRIMARY KEY,
       FechaCopia datetime not null,
       RealizadorDeLaCopia varchar(128) NOT NULL
    )

    En esta tabla tendría un registro por cada copia que se hiciera, con la fecha de realización de la copia, y la persona que hizo la copia. Esto nos da información de seguimiento de las copias.

    Luego las tablas de destino tendrán un campo IdCopia más los mismos campos que la tablas de origen, sin autonuméricos, los mismos campos con los mismos tipos de datos y la misma nulabilidad:

    Estas serían las tablas de destino.

    CREATE TABLE Clientes
    (
      IdCopia int NOT NULL,
      Id int NOT NULL, -- este es el id cliente, con el mismo valor que en la tabla de orgien
      -- Resto de los campos de clientes
    );
    
    CREATE TABLE Consumidores
    (
      IdCopia int NOT NULL,
      IdCliente, -- el mismo idcliente que en la tabla de origen,
      Id int NOT NULL, el id del consumidor, con el mismo valor que en la tabla de origen
      -- Resto de los campos de consumidores
    )

    Luego tendría un procedimiento almacenado que haría una copia de golpe y porrazo. Este procedimiento está en la base de datos de origen:

    CREATE PROCEDURE CrearCopia
       @RealizadorDeLaCopia varchar(128)
    AS
       DECLARE @IdCopia int
       INSERT INTO Copias(FechaCopia, RealizadorDeLaCopia)
       VALUES (GETDATE(), @RealizadorDeLaCopia)
    
       SET @IdCopia = SCOPE_IDENTITY()
    
       INSERT INTO BaseDatosDestino.dbo.Clientes
       SELECT
         @IdCopia, C.*
       FROM 
         dbo.Clientes C
    
       INSERT INTO BaseDatosDestino.dbo.Consumidores
       SELECT
         @IdCopia, C.*
       FROM
         dbo.Consumidores C
    
       SELECT @IdCopia AS IdCopia

    Y ya está. ¿Qué te parece?

    Mantenemos las relaciones en destino, los consumidores del cliente @IdCliente, de la copia @IdCopia son los siguientes; SELECT * FROM Consumidores WHERE IdCliente = @IdCliente AND IdCopia = @IdCopia

    Y mantenemos una relación entre los datos de origen y de destino, además de saber cuantas copias se ha hecho, cuando y por quien.


    Jesús López
    EntityLite: A Lightweight, Database First, Micro ORM

    jueves, 4 de septiembre de 2014 22:32
  • Excelente !!!! muchas gracias jesus es lo que estaba buscando ahora tendré que crear esos objetos en mi base de datos y hacer pruebas primero en el sql server 2012 y luego en mi aplicacion que es muy sencilla y te estaré comunicando los resultados.

    Muchisimas gracias jesus y a todos los compañeros también,  mañana les dire que tal me resultó !

    Saludos

    jueves, 4 de septiembre de 2014 22:52
  • Jesus que tal como estas !

    Aqui me encuentro molestandote de nuevo, mira trate de crear el stored procedure que me indicaste ya con mis bases de origen y destino asignadas de la siguiente manera:

    CREATE PROCEDURE CrearCopia
       @RealizadorDeLaCopia varchar(128)
    AS
    BEGIN
       DECLARE @IdCopia int
       INSERT INTO Copias(FechaCopia, RealizadorDeLaCopia)
       VALUES (GETDATE(), @RealizadorDeLaCopia)

       SET @IdCopia = SCOPE_IDENTITY()

       INSERT INTO HermesPrueba.dbo.Clientes
       SELECT
         @IdCopia, C.*
       FROM
         dbo.Clientes C

       INSERT INTO HermesA.dbo.Consumidores
       SELECT
         @IdCopia, C.*
       FROM
         dbo.Consumidores C

       SELECT @IdCopia AS IdCopia
    END

    pero al tratar de crearl me aparece el siguiente mensaje de error:

    Mens 8101, Nivel 16, Estado 1, Procedimiento CrearCopia, Línea 14
    Sólo puede especificarse un valor explícito para la columna de identidad de la tabla 'HermesPrueba.dbo.Clientes' cuando se usa una lista de columnas e IDENTITY_INSERT es ON.

    que es lo que tengo que corregir para poder ejecutarlo y hacer mis pruebas ? te lo agradecere mucho

    saludos

    sábado, 6 de septiembre de 2014 14:26
  • ¿No habíamos quedado en que la tablas de destino no tenían que tener autonuméricos?

    La tabla HermesPrueba.dbo.Clientes tiene un autonumérico, si no, no daría ese error.


    Jesús López
    EntityLite: A Lightweight, Database First, Micro ORM

    sábado, 6 de septiembre de 2014 15:49
  • Que tal jesus gracias por responderme !

    Tienes razón voy hacer esa corrección.

    Saludos y gracias por tu apoyo !

    sábado, 6 de septiembre de 2014 16:28
  • Que tal Jesus buenas noches !

    Me encuentro aqui molestandote de nuevo y disculpa mi pregunta si es algo ingenua pero no se como quitar la propiedad de auto incremental en los campos o no se cual sea por favor ayudame que me esta costando mucho trabajo entender esto por favor.

    Una disculpay muchas gracias de antemano

    saludos !!!

    lunes, 8 de septiembre de 2014 2:55
  • No es posible quitarle la propiedad identity a una columna, tienes que eliminarla y volverla a crear. Con el diseñador puede hacerse siempre que tengas desmarcada la opción "Prevent saving changes that require table-recreation", en el menú "Options"->"Designers"->"Table and Database designers"

    Jesús López
    EntityLite: A Lightweight, Database First, Micro ORM

    lunes, 8 de septiembre de 2014 5:20
  • Que tal jesus !

    Muchas gracias por responderme voy a intentarlo de esa manera es decir, voy a eliminar la tabla y volverla a crear.

    Ssaludos !!!

    lunes, 8 de septiembre de 2014 14:16
  • Amigos buenas tardes a todos.

    Espero se encuentren bien, yo aqui sigo molestandolos ya pude hacer todo lo que me han indicado para mi programa y efectivamente me da los consumidores como deseo, ahora tengo la siguiente pregunta.

    En mi tabla de clientes tengo un id que corresponde al cliente 15 es decir id 15, y lo que deseo es que en cada iteracion o que cada vez que inserte discrimine todos los clientes con ese id aunque incrementen es decir, que nunca inserte los 15, 35, 55 etc.... 

    ¿ como puedo hacerlo ? ya que en mi stored tengo esta linea de codigo para que los discrimine pero solo lo hace la primera vez que inserto y ya las siguientes no.

    if (@idCliente != 15)

    Espero sus respuestas y muchas gracias de antemano

    Saludos

    lunes, 8 de septiembre de 2014 18:02
  • ¿Y porqué no quieres el modelo que te propuse? el de que tengas IdCopia e Id en los clientes?

    Esta forma es más sencilla, y te da mayor funcionalidad, así que si no tienes una justificación para hacerlo como dices .....


    Jesús López
    EntityLite: A Lightweight, Database First, Micro ORM

    lunes, 8 de septiembre de 2014 18:18