Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/09/2004, 04:13
Avatar de Txukie
Txukie
 
Fecha de Ingreso: junio-2004
Ubicación: Al Oeste del Nervion
Mensajes: 47
Antigüedad: 19 años, 11 meses
Puntos: 0
Vale MithRandir tu respuesta me ha funcionado bien, no utilizo DTS porque estoy haciendo una aplicacion para que la use mi jefe, es decir, a prueba de idiotas, y que no importa que columnas tengas en la tabla Excel siempre te funcione, y esto con DTS no se puede hacer porque si guardas el procedimiento en lotes locales te busca siempre las mismas tablas y me puede dar error.
Esto es lo que he hecho hasta ahora
Código:
USE pc21
GO

DROP table produits_temp
SELECT     *
INTO            produits_temp
FROM         OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0', 
                      'Data Source="c:\produits.xls";User ID=Admin;Password=;Extended properties=Excel 5.0' )...produits$
WHERE ref_constr <> 'NULL'

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'ref_constr'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'ref_constr'
ALTER TABLE produits_temp ALTER COLUMN ref_constr nvarchar(30) not null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'titre_prod'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'titre_prod'
ALTER TABLE produits_temp ALTER COLUMN titre_prod nvarchar(128) null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'disp_prod'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'disp_prod'
ALTER TABLE produits_temp ALTER COLUMN disp_prod nvarchar(50) null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'ht_prix_public_e'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'ht_prix_public_e'
ALTER TABLE produits_temp ALTER COLUMN ht_prix_public_e money null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'ht_prod_e'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'ht_prod_e'
ALTER TABLE produits_temp ALTER COLUMN ht_prod_e money null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'ht_prod_f'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'ht_prod_f'
ALTER TABLE produits_temp ALTER COLUMN ht_prod_f money null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'ttc_prod_e'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'ttc_prod_e'
ALTER TABLE produits_temp ALTER COLUMN ttc_prod_e money null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'ttc_prod_f'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'ttc_prod_f'
ALTER TABLE produits_temp ALTER COLUMN ttc_prod_f money null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'taux_marge'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'taux_marge'
ALTER TABLE produits_temp ALTER COLUMN taux_marge float(8) null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'id_ss_cat'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'id_ss_cat'
ALTER TABLE produits_temp ALTER COLUMN id_ss_cat int null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'id_mark'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'id_mark'
ALTER TABLE produits_temp ALTER COLUMN id_mark int null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'ref_pc21'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'ref_pc21'
ALTER TABLE produits_temp ALTER COLUMN ref_pc21 nvarchar(50) null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'descrip_prod'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'descrip_prod'
ALTER TABLE produits_temp ALTER COLUMN descrip_prod ntext null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'caract_prod'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'caract_prod'
ALTER TABLE produits_temp ALTER COLUMN caract_prod ntext null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'img_prod'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'img_prod'
ALTER TABLE produits_temp ALTER COLUMN img_prod nvarchar(50) null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'affichage'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'affichage'
ALTER TABLE produits_temp ALTER COLUMN affichage bit null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'promo'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'promo'
ALTER TABLE produits_temp ALTER COLUMN promo bit null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'promo_gen'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'promo_gen'
ALTER TABLE produits_temp ALTER COLUMN promo_gen bit null
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'ht_prix_achat_e'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'ht_prix_achat_e efface'
ALTER TABLE produits_temp DROP COLUMN ht_prix_achat_e
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'titre_fournisseur'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'titre_fournisseur efface'
ALTER TABLE produits_temp DROP COLUMN titre_fournisseur
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'remise_frn'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'remise_frn efface'
ALTER TABLE produits_temp DROP COLUMN remise_frn
END
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'produits_temp' AND column_name = 'id_prod'
if (@@ROWCOUNT>=1)
BEGIN
PRINT 'id_prod efface'
ALTER TABLE produits_temp DROP COLUMN id_prod
END
GO
Ademas a partir de que tengo la tabla creada lo que kiero hacer es actualizar otra tabla.
Os explico, esta tabla que he creado se llama temp_produits, contiene detalles de productos que luego vendemos. Todos estos productos van a ir en la tabla produit_backup solo que algunos ya existen y otros son nuevos. Los existentes deberan actualizarse con los datos en temp_produits, solo las columnas que esta tabla contenga, siempre que la ref_constr (referencia constructor que uso como indice) sea igual. Aquellos que no existan en la tabla produit_backup (su ref_constr no esta en esa tabla) deberan ser añadidos.
Consigo hacer esto

Código:
SELECT produits_temp.* FROM produits_temp LEFT OUTER JOIN produit_backup ON produits_temp.ref_constr=produit_backup.ref_constr
WHERE produit_backup.ref_constr <> 'NULL'

SELECT produits_temp.*, produit_backup.ref_constr FROM produits_temp LEFT OUTER JOIN produit_backup ON produits_temp.ref_constr=produit_backup.ref_constr
WHERE produit_backup.ref_constr = 'NULL'
El primer SELECT me saca todos los productos a actualizar pero como los actualizo todos en masa????
El segundo SELECT no me saca ningun registro cuando normalmente deberia haber 17 registros y no se porque. Ayuda por favor.
__________________
LADRONES