[SQL 2000] Insert INTO

Le
Guy Gasiorowski
Bonjour,
Pour archiver des données, je me sers de INSERT INTO. Mais je voudrais
automatiser la listes des colonnes. Exemple :
INSERT INTO VentautoAR.dbo.VEHICULE (dbo.FN_LISTCOLS('vehicule'))
SELECT (dbo.FN_LISTCOLS('vehicule')) FROM Ventauto.dbo.VEHICULE
RIGHT OUTER JOIN Ventauto.dbo.ARVENDU ON (Ventauto.dbo.ARVENDU.pointpst =
Ventauto.dbo.VEHICULE.pointpst)

Je me sers d'une fonction disponible sur internet pour récupérer les noms de
colonne d'une table. et elle marche.
J'ai une erreur apparement apres la clause SELECT.
Est ce que quelqu'un a déjà fait ce genre de jour ?

--
@+
Guy
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD
Le #11852681
Guy Gasiorowski a écrit :
Bonjour,
Pour archiver des données, je me sers de INSERT INTO. Mais je voudrais
automatiser la listes des colonnes. Exemple :
INSERT INTO VentautoAR.dbo.VEHICULE (dbo.FN_LISTCOLS('vehicule'))
SELECT (dbo.FN_LISTCOLS('vehicule')) FROM Ventauto.dbo.VEHICULE
RIGHT OUTER JOIN Ventauto.dbo.ARVENDU ON (Ventauto.dbo.ARVENDU.pointpst =
Ventauto.dbo.VEHICULE.pointpst)

Je me sers d'une fonction disponible sur internet pour récupérer les noms de
colonne d'une table. et elle marche.
J'ai une erreur apparement apres la clause SELECT.
Est ce que quelqu'un a déjà fait ce genre de jour ?



vousne pouvez pas faire cela comme ça il faut passer par du sql dynamique.

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Guy Gasiorowski
Le #11852661
Sql dynamique ? Pourquoi pas, je vais chercher si je trouve un exemple
Merci

--
@+
Guy
"Fred BROUARD" %23Z2njv$
Guy Gasiorowski a écrit :
Bonjour,
Pour archiver des données, je me sers de INSERT INTO. Mais je voudrais
automatiser la listes des colonnes. Exemple :
INSERT INTO VentautoAR.dbo.VEHICULE (dbo.FN_LISTCOLS('vehicule'))
SELECT (dbo.FN_LISTCOLS('vehicule')) FROM Ventauto.dbo.VEHICULE
RIGHT OUTER JOIN Ventauto.dbo.ARVENDU ON
(Ventauto.dbo.ARVENDU.pointpst = Ventauto.dbo.VEHICULE.pointpst)

Je me sers d'une fonction disponible sur internet pour récupérer les noms
de colonne d'une table. et elle marche.
J'ai une erreur apparement apres la clause SELECT.
Est ce que quelqu'un a déjà fait ce genre de jour ?



vousne pouvez pas faire cela comme ça il faut passer par du sql dynamique.

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


Fred BROUARD
Le #11852651
Guy Gasiorowski a écrit :
Sql dynamique ? Pourquoi pas, je vais chercher si je trouve un exemple
Merci



post en dessous !

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Guy Gasiorowski
Le #11852641
"Fred BROUARD" %23Z2njv$
Guy Gasiorowski a écrit :
Bonjour,
Pour archiver des données, je me sers de INSERT INTO. Mais je voudrais
automatiser la listes des colonnes. Exemple :
INSERT INTO VentautoAR.dbo.VEHICULE (dbo.FN_LISTCOLS('vehicule'))
SELECT (dbo.FN_LISTCOLS('vehicule')) FROM Ventauto.dbo.VEHICULE
RIGHT OUTER JOIN Ventauto.dbo.ARVENDU ON
(Ventauto.dbo.ARVENDU.pointpst = Ventauto.dbo.VEHICULE.pointpst)

Je me sers d'une fonction disponible sur internet pour récupérer les noms
de colonne d'une table. et elle marche.
J'ai une erreur apparement apres la clause SELECT.
Est ce que quelqu'un a déjà fait ce genre de jour ?



vousne pouvez pas faire cela comme ça il faut passer par du sql dynamique.

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Voici la conclusion de mes recherches :
J'ai fait une procédure stockée mais je ne suis pas plus avancée
CREATE PROCEDURE proc_Archive
AS

DECLARE @CMD as varchar(512)

SET @CMD='INSERT INTO VentautoAR.VEHICULE dbo.FN_LISTCOLS(''vehicule'')
SELECT (FN_LISTCOLS(''vehicule'')) FROM Ventauto.VEHICULE RIGHT OUTER JOIN
Ventauto.ARVENDU ON (Ventauto.ARVENDU.pointpst =
Ventauto.VEHICULE.pointpst)'
PRINT @CMD
EXEC(@cmd)
GO

Un petit coup de main ?
Merci d'avance


--
@+
Guy
Fred BROUARD
Le #11852631
Guy Gasiorowski a écrit :

Voici la conclusion de mes recherches :
J'ai fait une procédure stockée mais je ne suis pas plus avancée
CREATE PROCEDURE proc_Archive
AS

DECLARE @CMD as varchar(512)

SET @CMD='INSERT INTO VentautoAR.VEHICULE dbo.FN_LISTCOLS(''vehicule'')
SELECT (FN_LISTCOLS(''vehicule'')) FROM Ventauto.VEHICULE RIGHT OUTER JOIN
Ventauto.ARVENDU ON (Ventauto.ARVENDU.pointpst =
Ventauto.VEHICULE.pointpst)'
PRINT @CMD
EXEC(@cmd)
GO

Un petit coup de main ?
Merci d'avance





USE VentautoAR;

DECLARE @SQL NVARCHAR(4000), @COLS NVARCHAR(4000);

SET @COLS = ''

-- concaténation des noms des colonnes :
SELECT @COLS = @COLS + COLUMN_NAME + ', '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'VEHICULE';

-- on enlève la dernière virgule parasite
SET @COLS = SUBSTRING(@COLS, 1, LEN(@COLS) - 1);

-- composition dynamique du SQL
SET @SQL = 'INSERT INTO dbo.VEHICULE (' + @COLS + ') '
+ 'SELECT ' + @COLS +' '
+ 'FROM dbo.VEHICULE AS V '
+ ' RIGHT OUTER JOIN dbo.ARVENDU AS A '
+ ' ON A.pointpst = V.pointpst';

-- exécution
EXEC(@SQL);

Si vous aviez lu les articles que j'ai écrit qui présente le langage
Transact SQL sur mon site SQLpro, vous auriez vu une procédure qui
ressemble étrangement à cela !
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4.3
procédure SP_SEARCH_STRING_ANYFIELD

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Guy Gasiorowski
Le #11852621
"Fred BROUARD" eJI$
Guy Gasiorowski a écrit :

Voici la conclusion de mes recherches :
J'ai fait une procédure stockée mais je ne suis pas plus avancée
CREATE PROCEDURE proc_Archive
AS

DECLARE @CMD as varchar(512)

SET @CMD='INSERT INTO VentautoAR.VEHICULE dbo.FN_LISTCOLS(''vehicule'')
SELECT (FN_LISTCOLS(''vehicule'')) FROM Ventauto.VEHICULE RIGHT OUTER
JOIN Ventauto.ARVENDU ON (Ventauto.ARVENDU.pointpst =
Ventauto.VEHICULE.pointpst)'
PRINT @CMD
EXEC(@cmd)
GO

Un petit coup de main ?
Merci d'avance





USE VentautoAR;

DECLARE @SQL NVARCHAR(4000), @COLS NVARCHAR(4000);

SET @COLS = ''

-- concaténation des noms des colonnes :
SELECT @COLS = @COLS + COLUMN_NAME + ', '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'VEHICULE';

-- on enlève la dernière virgule parasite
SET @COLS = SUBSTRING(@COLS, 1, LEN(@COLS) - 1);

-- composition dynamique du SQL
SET @SQL = 'INSERT INTO dbo.VEHICULE (' + @COLS + ') '
+ 'SELECT ' + @COLS +' '
+ 'FROM dbo.VEHICULE AS V '
+ ' RIGHT OUTER JOIN dbo.ARVENDU AS A '
+ ' ON A.pointpst = V.pointpst';

-- exécution
EXEC(@SQL);

Si vous aviez lu les articles que j'ai écrit qui présente le langage
Transact SQL sur mon site SQLpro, vous auriez vu une procédure qui
ressemble étrangement à cela !
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4.3
procédure SP_SEARCH_STRING_ANYFIELD

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Merci Frédéric,
Pourtant le site sqlpro est un de mes sites de références pour SQL, J'ai
cherché mais jamais je n'aurais trouvé dans cette procédure
(SP_SEARCH_STRING_ANYFIELD)
En tout cas lerci beaucoup pour la réponse, je vais tester çà.
a+
Guy
Guy Gasiorowski
Le #11852501
"Guy Gasiorowski" news:


"Fred BROUARD" news: eJI$
Guy Gasiorowski a écrit :

Voici la conclusion de mes recherches :
J'ai fait une procédure stockée mais je ne suis pas plus avancée
CREATE PROCEDURE proc_Archive
AS

DECLARE @CMD as varchar(512)

SET @CMD='INSERT INTO VentautoAR.VEHICULE dbo.FN_LISTCOLS(''vehicule'')
SELECT (FN_LISTCOLS(''vehicule'')) FROM Ventauto.VEHICULE RIGHT OUTER
JOIN Ventauto.ARVENDU ON (Ventauto.ARVENDU.pointpst =
Ventauto.VEHICULE.pointpst)'
PRINT @CMD
EXEC(@cmd)
GO

Un petit coup de main ?
Merci d'avance





USE VentautoAR;

DECLARE @SQL NVARCHAR(4000), @COLS NVARCHAR(4000);

SET @COLS = ''

-- concaténation des noms des colonnes :
SELECT @COLS = @COLS + COLUMN_NAME + ', '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'VEHICULE';

-- on enlève la dernière virgule parasite
SET @COLS = SUBSTRING(@COLS, 1, LEN(@COLS) - 1);

-- composition dynamique du SQL
SET @SQL = 'INSERT INTO dbo.VEHICULE (' + @COLS + ') '
+ 'SELECT ' + @COLS +' '
+ 'FROM dbo.VEHICULE AS V '
+ ' RIGHT OUTER JOIN dbo.ARVENDU AS A '
+ ' ON A.pointpst = V.pointpst';

-- exécution
EXEC(@SQL);

Si vous aviez lu les articles que j'ai écrit qui présente le langage
Transact SQL sur mon site SQLpro, vous auriez vu une procédure qui
ressemble étrangement à cela !
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4.3
procédure SP_SEARCH_STRING_ANYFIELD

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Merci Frédéric,
Pourtant le site sqlpro est un de mes sites de références pour SQL, J'ai
cherché mais jamais je n'aurais trouvé dans cette procédure
(SP_SEARCH_STRING_ANYFIELD)
En tout cas lerci beaucoup pour la réponse, je vais tester çà.
a+
Guy




Voici la commande insert into générée :
INSERT INTO VentautoAR.dbo.VEHICULE (pointveh, ...) SELECT pointveh, ...
FROM Ventauto.dbo.VEHICULE AS V RIGHT OUTER JOIN Ventauto.dbo.ARVENDU AS ARV
ON ARV.pointpst = V.pointpst

et la commande est correct

Mais il me fait une erreur sur des colonnes ambigus. Ces colonnes sont
celles de la table ARVENDU (pointveh par exemple présent dans les 2 tables).
Comment positionner des alias sur des champs non utilisés ?
Merci d'avance
Fred BROUARD
Le #11852451
Guy Gasiorowski a écrit :
Voici la commande insert into générée :
INSERT INTO VentautoAR.dbo.VEHICULE (pointveh, ...) SELECT pointveh, ...
FROM Ventauto.dbo.VEHICULE AS V RIGHT OUTER JOIN Ventauto.dbo.ARVENDU AS ARV
ON ARV.pointpst = V.pointpst

et la commande est correct

Mais il me fait une erreur sur des colonnes ambigus. Ces colonnes sont
celles de la table ARVENDU (pointveh par exemple présent dans les 2 tables).
Comment positionner des alias sur des champs non utilisés ?
Merci d'avance






INSERT INTO VentautoAR.dbo.VEHICULE (pointveh, ...)
SELECT ???.pointveh, ???....
FROM Ventauto.dbo.VEHICULE AS V
RIGHT OUTER JOIN Ventauto.dbo.ARVENDU AS ARV
ON ARV.pointpst = V.pointpst

et remplace les ??? par les alias.

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Guy Gasiorowski
Le #11852441
"Fred BROUARD"
Guy Gasiorowski a écrit :
Voici la commande insert into générée :
INSERT INTO VentautoAR.dbo.VEHICULE (pointveh, ...) SELECT pointveh, ...
FROM Ventauto.dbo.VEHICULE AS V RIGHT OUTER JOIN Ventauto.dbo.ARVENDU AS
ARV ON ARV.pointpst = V.pointpst

et la commande est correct

Mais il me fait une erreur sur des colonnes ambigus. Ces colonnes sont
celles de la table ARVENDU (pointveh par exemple présent dans les 2
tables). Comment positionner des alias sur des champs non utilisés ?
Merci d'avance




INSERT INTO VentautoAR.dbo.VEHICULE (pointveh, ...)
SELECT ???.pointveh, ???....
FROM Ventauto.dbo.VEHICULE AS V
RIGHT OUTER JOIN Ventauto.dbo.ARVENDU AS ARV
ON ARV.pointpst = V.pointpst

et remplace les ??? par les alias.

A +



Frédéric,
C'est tout bon, merci pour ta patience.
Guy
Publicité
Poster une réponse
Anonyme