Bonjour,
sous SQL server 2000, j'ai un problème dans une procédure stockée : je crée
une table temporaire, je fais un bulk insert d'un fichier dans cette table,
je modifie la table pour ajouter une colonne, puis je fais des contrôles sur
les données.
L'alter table pour ajouter une colonne fonctionne seulement si il n'y a pas
le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
voilà le code :
CREATE PROCEDURE [dbo].ps_tap_import_GLA
-- importe les données du fichier du grand livre analytique dans la table
après différents contrôles
-- n'est lancée que s'il y a un fichier à intégrer
@cheminFichier varchar(100),
@nomFichier varchar(100)
AS
declare @query varchar(2000)
declare @result int
begin
-- On créé la table Temporaire de destination
if exists (select uid from tempdb.dbo.sysobjects where name =
'##GL_ANALYTIQUE')
drop table ##GL_ANALYTIQUE
CREATE TABLE ##GL_ANALYTIQUE (
num_mvt varchar(255) NULL,
num_ecriture varchar (255) NULL ,
compte_ana_12 varchar (255) NULL ,
compte_gene varchar (255) NULL ,
code_uc_aff varchar (255) NULL ,
code_uc_emet varchar (255) NULL ,
debit varchar (255) NULL ,
credit varchar (255) NULL ,
quantite varchar (255) NULL ,
code_journal varchar (255) NULL ,
complement_uc varchar (255) NULL ,
ref_externe varchar (255) NULL ,
exercice_comptable varchar (255) NULL ,
mois_comptable varchar (255) NULL ,
code_periode varchar (255) NULL ,
date_enregistrement varchar (255) NULL ,
lib_ecr varchar(255) NULL
)
set @nomFichier=@cheminFichier+@nomFichier
-- On insère les données du fichier dans la table temporaire
set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier + ''''
set @query=@query+' with ('
set @query=@query+'fieldterminator=''t'','
set @query=@query+'firstrow=2,'
set @query=@query+'keepnulls)'
print @query
execute (@query)
-- On ajoute un champ flag à la table temporaire
print 'ajout flag à la table'
ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
-- On contrôle les lignes
print 'contrôle des lignes'
-- longueur de champs
-- si l'update suivant est enlevé, la table est modifiée, tout va bien
-- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas !!!!
update dbo.##GL_ANALYTIQUE
set flag1='1'
where len(num_mvt) > 9
or len(compte_gene) > 8
or len(code_journal) > 3
or len(complement_uc) > 5
or len(ref_externe) > 15
or len(code_periode) > 1
or len(lib_ecr)>30
or len(num_ecriture)>9
end
GO
Je vous remercie d'avance pour votre aide !
Bonne journée,
Anne-Laure
Bonjour,
sous SQL server 2000, j'ai un problème dans une procédure stockée : je crée
une table temporaire, je fais un bulk insert d'un fichier dans cette table,
je modifie la table pour ajouter une colonne, puis je fais des contrôles sur
les données.
L'alter table pour ajouter une colonne fonctionne seulement si il n'y a pas
le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
voilà le code :
CREATE PROCEDURE [dbo].ps_tap_import_GLA
-- importe les données du fichier du grand livre analytique dans la table
après différents contrôles
-- n'est lancée que s'il y a un fichier à intégrer
@cheminFichier varchar(100),
@nomFichier varchar(100)
AS
declare @query varchar(2000)
declare @result int
begin
-- On créé la table Temporaire de destination
if exists (select uid from tempdb.dbo.sysobjects where name =
'##GL_ANALYTIQUE')
drop table ##GL_ANALYTIQUE
CREATE TABLE ##GL_ANALYTIQUE (
num_mvt varchar(255) NULL,
num_ecriture varchar (255) NULL ,
compte_ana_12 varchar (255) NULL ,
compte_gene varchar (255) NULL ,
code_uc_aff varchar (255) NULL ,
code_uc_emet varchar (255) NULL ,
debit varchar (255) NULL ,
credit varchar (255) NULL ,
quantite varchar (255) NULL ,
code_journal varchar (255) NULL ,
complement_uc varchar (255) NULL ,
ref_externe varchar (255) NULL ,
exercice_comptable varchar (255) NULL ,
mois_comptable varchar (255) NULL ,
code_periode varchar (255) NULL ,
date_enregistrement varchar (255) NULL ,
lib_ecr varchar(255) NULL
)
set @nomFichier=@cheminFichier+@nomFichier
-- On insère les données du fichier dans la table temporaire
set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier + ''''
set @query=@query+' with ('
set @query=@query+'fieldterminator=''t'','
set @query=@query+'firstrow=2,'
set @query=@query+'keepnulls)'
print @query
execute (@query)
-- On ajoute un champ flag à la table temporaire
print 'ajout flag à la table'
ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
-- On contrôle les lignes
print 'contrôle des lignes'
-- longueur de champs
-- si l'update suivant est enlevé, la table est modifiée, tout va bien
-- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas !!!!
update dbo.##GL_ANALYTIQUE
set flag1='1'
where len(num_mvt) > 9
or len(compte_gene) > 8
or len(code_journal) > 3
or len(complement_uc) > 5
or len(ref_externe) > 15
or len(code_periode) > 1
or len(lib_ecr)>30
or len(num_ecriture)>9
end
GO
Je vous remercie d'avance pour votre aide !
Bonne journée,
Anne-Laure
Bonjour,
sous SQL server 2000, j'ai un problème dans une procédure stockée : je crée
une table temporaire, je fais un bulk insert d'un fichier dans cette table,
je modifie la table pour ajouter une colonne, puis je fais des contrôles sur
les données.
L'alter table pour ajouter une colonne fonctionne seulement si il n'y a pas
le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
voilà le code :
CREATE PROCEDURE [dbo].ps_tap_import_GLA
-- importe les données du fichier du grand livre analytique dans la table
après différents contrôles
-- n'est lancée que s'il y a un fichier à intégrer
@cheminFichier varchar(100),
@nomFichier varchar(100)
AS
declare @query varchar(2000)
declare @result int
begin
-- On créé la table Temporaire de destination
if exists (select uid from tempdb.dbo.sysobjects where name =
'##GL_ANALYTIQUE')
drop table ##GL_ANALYTIQUE
CREATE TABLE ##GL_ANALYTIQUE (
num_mvt varchar(255) NULL,
num_ecriture varchar (255) NULL ,
compte_ana_12 varchar (255) NULL ,
compte_gene varchar (255) NULL ,
code_uc_aff varchar (255) NULL ,
code_uc_emet varchar (255) NULL ,
debit varchar (255) NULL ,
credit varchar (255) NULL ,
quantite varchar (255) NULL ,
code_journal varchar (255) NULL ,
complement_uc varchar (255) NULL ,
ref_externe varchar (255) NULL ,
exercice_comptable varchar (255) NULL ,
mois_comptable varchar (255) NULL ,
code_periode varchar (255) NULL ,
date_enregistrement varchar (255) NULL ,
lib_ecr varchar(255) NULL
)
set @nomFichier=@cheminFichier+@nomFichier
-- On insère les données du fichier dans la table temporaire
set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier + ''''
set @query=@query+' with ('
set @query=@query+'fieldterminator=''t'','
set @query=@query+'firstrow=2,'
set @query=@query+'keepnulls)'
print @query
execute (@query)
-- On ajoute un champ flag à la table temporaire
print 'ajout flag à la table'
ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
-- On contrôle les lignes
print 'contrôle des lignes'
-- longueur de champs
-- si l'update suivant est enlevé, la table est modifiée, tout va bien
-- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas !!!!
update dbo.##GL_ANALYTIQUE
set flag1='1'
where len(num_mvt) > 9
or len(compte_gene) > 8
or len(code_journal) > 3
or len(complement_uc) > 5
or len(ref_externe) > 15
or len(code_periode) > 1
or len(lib_ecr)>30
or len(num_ecriture)>9
end
GO
Je vous remercie d'avance pour votre aide !
Bonne journée,
Anne-Laure
Bonjour,
sous SQL server 2000, j'ai un problème dans une procédure stockée : je
crée
une table temporaire, je fais un bulk insert d'un fichier dans cette
table,
je modifie la table pour ajouter une colonne, puis je fais des contrôles
sur
les données.
L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
pas
le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
voilà le code :
CREATE PROCEDURE [dbo].ps_tap_import_GLA
-- importe les données du fichier du grand livre analytique dans la table
après différents contrôles
-- n'est lancée que s'il y a un fichier à intégrer
@cheminFichier varchar(100),
@nomFichier varchar(100)
AS
declare @query varchar(2000)
declare @result int
begin
-- On créé la table Temporaire de destination
if exists (select uid from tempdb.dbo.sysobjects where name > '##GL_ANALYTIQUE')
drop table ##GL_ANALYTIQUE
CREATE TABLE ##GL_ANALYTIQUE (
num_mvt varchar(255) NULL,
num_ecriture varchar (255) NULL ,
compte_ana_12 varchar (255) NULL ,
compte_gene varchar (255) NULL ,
code_uc_aff varchar (255) NULL ,
code_uc_emet varchar (255) NULL ,
debit varchar (255) NULL ,
credit varchar (255) NULL ,
quantite varchar (255) NULL ,
code_journal varchar (255) NULL ,
complement_uc varchar (255) NULL ,
ref_externe varchar (255) NULL ,
exercice_comptable varchar (255) NULL ,
mois_comptable varchar (255) NULL ,
code_periode varchar (255) NULL ,
date_enregistrement varchar (255) NULL ,
lib_ecr varchar(255) NULL
)
set @nomFichier=@cheminFichier+@nomFichier
-- On insère les données du fichier dans la table temporaire
set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
''''
set @query=@query+' with ('
set @query=@query+'fieldterminator=''t'','
set @query=@query+'firstrow=2,'
set @query=@query+'keepnulls)'
print @query
execute (@query)
-- On ajoute un champ flag à la table temporaire
print 'ajout flag à la table'
ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
-- On contrôle les lignes
print 'contrôle des lignes'
-- longueur de champs
-- si l'update suivant est enlevé, la table est modifiée, tout va bien
-- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
!!!!
update dbo.##GL_ANALYTIQUE
set flag1='1'
where len(num_mvt) > 9
or len(compte_gene) > 8
or len(code_journal) > 3
or len(complement_uc) > 5
or len(ref_externe) > 15
or len(code_periode) > 1
or len(lib_ecr)>30
or len(num_ecriture)>9
end
GO
Je vous remercie d'avance pour votre aide !
Bonne journée,
Anne-Laure
Bonjour,
sous SQL server 2000, j'ai un problème dans une procédure stockée : je
crée
une table temporaire, je fais un bulk insert d'un fichier dans cette
table,
je modifie la table pour ajouter une colonne, puis je fais des contrôles
sur
les données.
L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
pas
le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
voilà le code :
CREATE PROCEDURE [dbo].ps_tap_import_GLA
-- importe les données du fichier du grand livre analytique dans la table
après différents contrôles
-- n'est lancée que s'il y a un fichier à intégrer
@cheminFichier varchar(100),
@nomFichier varchar(100)
AS
declare @query varchar(2000)
declare @result int
begin
-- On créé la table Temporaire de destination
if exists (select uid from tempdb.dbo.sysobjects where name > '##GL_ANALYTIQUE')
drop table ##GL_ANALYTIQUE
CREATE TABLE ##GL_ANALYTIQUE (
num_mvt varchar(255) NULL,
num_ecriture varchar (255) NULL ,
compte_ana_12 varchar (255) NULL ,
compte_gene varchar (255) NULL ,
code_uc_aff varchar (255) NULL ,
code_uc_emet varchar (255) NULL ,
debit varchar (255) NULL ,
credit varchar (255) NULL ,
quantite varchar (255) NULL ,
code_journal varchar (255) NULL ,
complement_uc varchar (255) NULL ,
ref_externe varchar (255) NULL ,
exercice_comptable varchar (255) NULL ,
mois_comptable varchar (255) NULL ,
code_periode varchar (255) NULL ,
date_enregistrement varchar (255) NULL ,
lib_ecr varchar(255) NULL
)
set @nomFichier=@cheminFichier+@nomFichier
-- On insère les données du fichier dans la table temporaire
set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
''''
set @query=@query+' with ('
set @query=@query+'fieldterminator=''t'','
set @query=@query+'firstrow=2,'
set @query=@query+'keepnulls)'
print @query
execute (@query)
-- On ajoute un champ flag à la table temporaire
print 'ajout flag à la table'
ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
-- On contrôle les lignes
print 'contrôle des lignes'
-- longueur de champs
-- si l'update suivant est enlevé, la table est modifiée, tout va bien
-- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
!!!!
update dbo.##GL_ANALYTIQUE
set flag1='1'
where len(num_mvt) > 9
or len(compte_gene) > 8
or len(code_journal) > 3
or len(complement_uc) > 5
or len(ref_externe) > 15
or len(code_periode) > 1
or len(lib_ecr)>30
or len(num_ecriture)>9
end
GO
Je vous remercie d'avance pour votre aide !
Bonne journée,
Anne-Laure
Bonjour,
sous SQL server 2000, j'ai un problème dans une procédure stockée : je
crée
une table temporaire, je fais un bulk insert d'un fichier dans cette
table,
je modifie la table pour ajouter une colonne, puis je fais des contrôles
sur
les données.
L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
pas
le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
voilà le code :
CREATE PROCEDURE [dbo].ps_tap_import_GLA
-- importe les données du fichier du grand livre analytique dans la table
après différents contrôles
-- n'est lancée que s'il y a un fichier à intégrer
@cheminFichier varchar(100),
@nomFichier varchar(100)
AS
declare @query varchar(2000)
declare @result int
begin
-- On créé la table Temporaire de destination
if exists (select uid from tempdb.dbo.sysobjects where name > '##GL_ANALYTIQUE')
drop table ##GL_ANALYTIQUE
CREATE TABLE ##GL_ANALYTIQUE (
num_mvt varchar(255) NULL,
num_ecriture varchar (255) NULL ,
compte_ana_12 varchar (255) NULL ,
compte_gene varchar (255) NULL ,
code_uc_aff varchar (255) NULL ,
code_uc_emet varchar (255) NULL ,
debit varchar (255) NULL ,
credit varchar (255) NULL ,
quantite varchar (255) NULL ,
code_journal varchar (255) NULL ,
complement_uc varchar (255) NULL ,
ref_externe varchar (255) NULL ,
exercice_comptable varchar (255) NULL ,
mois_comptable varchar (255) NULL ,
code_periode varchar (255) NULL ,
date_enregistrement varchar (255) NULL ,
lib_ecr varchar(255) NULL
)
set @nomFichier=@cheminFichier+@nomFichier
-- On insère les données du fichier dans la table temporaire
set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
''''
set @query=@query+' with ('
set @query=@query+'fieldterminator=''t'','
set @query=@query+'firstrow=2,'
set @query=@query+'keepnulls)'
print @query
execute (@query)
-- On ajoute un champ flag à la table temporaire
print 'ajout flag à la table'
ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
-- On contrôle les lignes
print 'contrôle des lignes'
-- longueur de champs
-- si l'update suivant est enlevé, la table est modifiée, tout va bien
-- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
!!!!
update dbo.##GL_ANALYTIQUE
set flag1='1'
where len(num_mvt) > 9
or len(compte_gene) > 8
or len(code_journal) > 3
or len(complement_uc) > 5
or len(ref_externe) > 15
or len(code_periode) > 1
or len(lib_ecr)>30
or len(num_ecriture)>9
end
GO
Je vous remercie d'avance pour votre aide !
Bonne journée,
Anne-Laure
C'est effectivement assez surprenant!!!
T'es bien sure que la seul difference est la ligne UPDATE
Je conviens que ta procedure est peut etre longue et complexe mais il serait
interessant d'essayer d'isoler le probleme en la reecrivant de facon assez
generique en supprimant un a un les ontroles intermediaires.
Tu t'apercevras peut etre plus facilement du bout de code responsable
Si la fin, tu as toujours le meme probleme, publie alors le code de cette
procedure simpliee afin de pouvoir tester
--
Bien cordialement
Med Bouchenafa
"Anne-Laure" wrote in message
news:
> Bonjour,
>
> sous SQL server 2000, j'ai un problème dans une procédure stockée : je
> crée
> une table temporaire, je fais un bulk insert d'un fichier dans cette
> table,
> je modifie la table pour ajouter une colonne, puis je fais des contrôles
> sur
> les données.
> L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
> pas
> le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
>
> voilà le code :
>
> CREATE PROCEDURE [dbo].ps_tap_import_GLA
> -- importe les données du fichier du grand livre analytique dans la table
> après différents contrôles
> -- n'est lancée que s'il y a un fichier à intégrer
> @cheminFichier varchar(100),
> @nomFichier varchar(100)
> AS
> declare @query varchar(2000)
> declare @result int
> begin
>
> -- On créé la table Temporaire de destination
> if exists (select uid from tempdb.dbo.sysobjects where name > > '##GL_ANALYTIQUE')
> drop table ##GL_ANALYTIQUE
>
> CREATE TABLE ##GL_ANALYTIQUE (
> num_mvt varchar(255) NULL,
> num_ecriture varchar (255) NULL ,
> compte_ana_12 varchar (255) NULL ,
> compte_gene varchar (255) NULL ,
> code_uc_aff varchar (255) NULL ,
> code_uc_emet varchar (255) NULL ,
> debit varchar (255) NULL ,
> credit varchar (255) NULL ,
> quantite varchar (255) NULL ,
> code_journal varchar (255) NULL ,
> complement_uc varchar (255) NULL ,
> ref_externe varchar (255) NULL ,
> exercice_comptable varchar (255) NULL ,
> mois_comptable varchar (255) NULL ,
> code_periode varchar (255) NULL ,
> date_enregistrement varchar (255) NULL ,
> lib_ecr varchar(255) NULL
> )
>
> set @nomFichier=@cheminFichier+@nomFichier
> -- On insère les données du fichier dans la table temporaire
> set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
> ''''
> set @query=@query+' with ('
> set @query=@query+'fieldterminator=''t'','
> set @query=@query+'firstrow=2,'
> set @query=@query+'keepnulls)'
> print @query
> execute (@query)
>
> -- On ajoute un champ flag à la table temporaire
> print 'ajout flag à la table'
> ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
>
>
> -- On contrôle les lignes
> print 'contrôle des lignes'
> -- longueur de champs
> -- si l'update suivant est enlevé, la table est modifiée, tout va bien
> -- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
> !!!!
> update dbo.##GL_ANALYTIQUE
> set flag1='1'
> where len(num_mvt) > 9
> or len(compte_gene) > 8
> or len(code_journal) > 3
> or len(complement_uc) > 5
> or len(ref_externe) > 15
> or len(code_periode) > 1
> or len(lib_ecr)>30
> or len(num_ecriture)>9
>
>
> end
> GO
>
>
> Je vous remercie d'avance pour votre aide !
> Bonne journée,
> Anne-Laure
C'est effectivement assez surprenant!!!
T'es bien sure que la seul difference est la ligne UPDATE
Je conviens que ta procedure est peut etre longue et complexe mais il serait
interessant d'essayer d'isoler le probleme en la reecrivant de facon assez
generique en supprimant un a un les ontroles intermediaires.
Tu t'apercevras peut etre plus facilement du bout de code responsable
Si la fin, tu as toujours le meme probleme, publie alors le code de cette
procedure simpliee afin de pouvoir tester
--
Bien cordialement
Med Bouchenafa
"Anne-Laure" <AnneLaure@discussions.microsoft.com> wrote in message
news:7EF297D3-1C37-478A-87DD-22BED5330B89@microsoft.com...
> Bonjour,
>
> sous SQL server 2000, j'ai un problème dans une procédure stockée : je
> crée
> une table temporaire, je fais un bulk insert d'un fichier dans cette
> table,
> je modifie la table pour ajouter une colonne, puis je fais des contrôles
> sur
> les données.
> L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
> pas
> le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
>
> voilà le code :
>
> CREATE PROCEDURE [dbo].ps_tap_import_GLA
> -- importe les données du fichier du grand livre analytique dans la table
> après différents contrôles
> -- n'est lancée que s'il y a un fichier à intégrer
> @cheminFichier varchar(100),
> @nomFichier varchar(100)
> AS
> declare @query varchar(2000)
> declare @result int
> begin
>
> -- On créé la table Temporaire de destination
> if exists (select uid from tempdb.dbo.sysobjects where name > > '##GL_ANALYTIQUE')
> drop table ##GL_ANALYTIQUE
>
> CREATE TABLE ##GL_ANALYTIQUE (
> num_mvt varchar(255) NULL,
> num_ecriture varchar (255) NULL ,
> compte_ana_12 varchar (255) NULL ,
> compte_gene varchar (255) NULL ,
> code_uc_aff varchar (255) NULL ,
> code_uc_emet varchar (255) NULL ,
> debit varchar (255) NULL ,
> credit varchar (255) NULL ,
> quantite varchar (255) NULL ,
> code_journal varchar (255) NULL ,
> complement_uc varchar (255) NULL ,
> ref_externe varchar (255) NULL ,
> exercice_comptable varchar (255) NULL ,
> mois_comptable varchar (255) NULL ,
> code_periode varchar (255) NULL ,
> date_enregistrement varchar (255) NULL ,
> lib_ecr varchar(255) NULL
> )
>
> set @nomFichier=@cheminFichier+@nomFichier
> -- On insère les données du fichier dans la table temporaire
> set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
> ''''
> set @query=@query+' with ('
> set @query=@query+'fieldterminator=''t'','
> set @query=@query+'firstrow=2,'
> set @query=@query+'keepnulls)'
> print @query
> execute (@query)
>
> -- On ajoute un champ flag à la table temporaire
> print 'ajout flag à la table'
> ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
>
>
> -- On contrôle les lignes
> print 'contrôle des lignes'
> -- longueur de champs
> -- si l'update suivant est enlevé, la table est modifiée, tout va bien
> -- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
> !!!!
> update dbo.##GL_ANALYTIQUE
> set flag1='1'
> where len(num_mvt) > 9
> or len(compte_gene) > 8
> or len(code_journal) > 3
> or len(complement_uc) > 5
> or len(ref_externe) > 15
> or len(code_periode) > 1
> or len(lib_ecr)>30
> or len(num_ecriture)>9
>
>
> end
> GO
>
>
> Je vous remercie d'avance pour votre aide !
> Bonne journée,
> Anne-Laure
C'est effectivement assez surprenant!!!
T'es bien sure que la seul difference est la ligne UPDATE
Je conviens que ta procedure est peut etre longue et complexe mais il serait
interessant d'essayer d'isoler le probleme en la reecrivant de facon assez
generique en supprimant un a un les ontroles intermediaires.
Tu t'apercevras peut etre plus facilement du bout de code responsable
Si la fin, tu as toujours le meme probleme, publie alors le code de cette
procedure simpliee afin de pouvoir tester
--
Bien cordialement
Med Bouchenafa
"Anne-Laure" wrote in message
news:
> Bonjour,
>
> sous SQL server 2000, j'ai un problème dans une procédure stockée : je
> crée
> une table temporaire, je fais un bulk insert d'un fichier dans cette
> table,
> je modifie la table pour ajouter une colonne, puis je fais des contrôles
> sur
> les données.
> L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
> pas
> le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
>
> voilà le code :
>
> CREATE PROCEDURE [dbo].ps_tap_import_GLA
> -- importe les données du fichier du grand livre analytique dans la table
> après différents contrôles
> -- n'est lancée que s'il y a un fichier à intégrer
> @cheminFichier varchar(100),
> @nomFichier varchar(100)
> AS
> declare @query varchar(2000)
> declare @result int
> begin
>
> -- On créé la table Temporaire de destination
> if exists (select uid from tempdb.dbo.sysobjects where name > > '##GL_ANALYTIQUE')
> drop table ##GL_ANALYTIQUE
>
> CREATE TABLE ##GL_ANALYTIQUE (
> num_mvt varchar(255) NULL,
> num_ecriture varchar (255) NULL ,
> compte_ana_12 varchar (255) NULL ,
> compte_gene varchar (255) NULL ,
> code_uc_aff varchar (255) NULL ,
> code_uc_emet varchar (255) NULL ,
> debit varchar (255) NULL ,
> credit varchar (255) NULL ,
> quantite varchar (255) NULL ,
> code_journal varchar (255) NULL ,
> complement_uc varchar (255) NULL ,
> ref_externe varchar (255) NULL ,
> exercice_comptable varchar (255) NULL ,
> mois_comptable varchar (255) NULL ,
> code_periode varchar (255) NULL ,
> date_enregistrement varchar (255) NULL ,
> lib_ecr varchar(255) NULL
> )
>
> set @nomFichier=@cheminFichier+@nomFichier
> -- On insère les données du fichier dans la table temporaire
> set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
> ''''
> set @query=@query+' with ('
> set @query=@query+'fieldterminator=''t'','
> set @query=@query+'firstrow=2,'
> set @query=@query+'keepnulls)'
> print @query
> execute (@query)
>
> -- On ajoute un champ flag à la table temporaire
> print 'ajout flag à la table'
> ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
>
>
> -- On contrôle les lignes
> print 'contrôle des lignes'
> -- longueur de champs
> -- si l'update suivant est enlevé, la table est modifiée, tout va bien
> -- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
> !!!!
> update dbo.##GL_ANALYTIQUE
> set flag1='1'
> where len(num_mvt) > 9
> or len(compte_gene) > 8
> or len(code_journal) > 3
> or len(complement_uc) > 5
> or len(ref_externe) > 15
> or len(code_periode) > 1
> or len(lib_ecr)>30
> or len(num_ecriture)>9
>
>
> end
> GO
>
>
> Je vous remercie d'avance pour votre aide !
> Bonne journée,
> Anne-Laure
D'accord avec mes prédecesseurs, le mélange DML/DDL dans une proc stokée
n'est pas sans quelques conséquences.
Cependant, sous vous ne pouvez pas vous en passer, un contournement peut
malgré tout exister, à savoir effectuer le alter table dans un exec
(EXEC('alter table ...')).
Guillaume.
======================= > "Med Bouchenafa" a écrit :
> C'est effectivement assez surprenant!!!
> T'es bien sure que la seul difference est la ligne UPDATE
> Je conviens que ta procedure est peut etre longue et complexe mais il serait
> interessant d'essayer d'isoler le probleme en la reecrivant de facon assez
> generique en supprimant un a un les ontroles intermediaires.
> Tu t'apercevras peut etre plus facilement du bout de code responsable
> Si la fin, tu as toujours le meme probleme, publie alors le code de cette
> procedure simpliee afin de pouvoir tester
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "Anne-Laure" wrote in message
> news:
> > Bonjour,
> >
> > sous SQL server 2000, j'ai un problème dans une procédure stockée : je
> > crée
> > une table temporaire, je fais un bulk insert d'un fichier dans cette
> > table,
> > je modifie la table pour ajouter une colonne, puis je fais des contrôles
> > sur
> > les données.
> > L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
> > pas
> > le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
> >
> > voilà le code :
> >
> > CREATE PROCEDURE [dbo].ps_tap_import_GLA
> > -- importe les données du fichier du grand livre analytique dans la table
> > après différents contrôles
> > -- n'est lancée que s'il y a un fichier à intégrer
> > @cheminFichier varchar(100),
> > @nomFichier varchar(100)
> > AS
> > declare @query varchar(2000)
> > declare @result int
> > begin
> >
> > -- On créé la table Temporaire de destination
> > if exists (select uid from tempdb.dbo.sysobjects where name > > > '##GL_ANALYTIQUE')
> > drop table ##GL_ANALYTIQUE
> >
> > CREATE TABLE ##GL_ANALYTIQUE (
> > num_mvt varchar(255) NULL,
> > num_ecriture varchar (255) NULL ,
> > compte_ana_12 varchar (255) NULL ,
> > compte_gene varchar (255) NULL ,
> > code_uc_aff varchar (255) NULL ,
> > code_uc_emet varchar (255) NULL ,
> > debit varchar (255) NULL ,
> > credit varchar (255) NULL ,
> > quantite varchar (255) NULL ,
> > code_journal varchar (255) NULL ,
> > complement_uc varchar (255) NULL ,
> > ref_externe varchar (255) NULL ,
> > exercice_comptable varchar (255) NULL ,
> > mois_comptable varchar (255) NULL ,
> > code_periode varchar (255) NULL ,
> > date_enregistrement varchar (255) NULL ,
> > lib_ecr varchar(255) NULL
> > )
> >
> > set @nomFichier=@cheminFichier+@nomFichier
> > -- On insère les données du fichier dans la table temporaire
> > set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
> > ''''
> > set @query=@query+' with ('
> > set @query=@query+'fieldterminator=''t'','
> > set @query=@query+'firstrow=2,'
> > set @query=@query+'keepnulls)'
> > print @query
> > execute (@query)
> >
> > -- On ajoute un champ flag à la table temporaire
> > print 'ajout flag à la table'
> > ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
> >
> >
> > -- On contrôle les lignes
> > print 'contrôle des lignes'
> > -- longueur de champs
> > -- si l'update suivant est enlevé, la table est modifiée, tout va bien
> > -- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
> > !!!!
> > update dbo.##GL_ANALYTIQUE
> > set flag1='1'
> > where len(num_mvt) > 9
> > or len(compte_gene) > 8
> > or len(code_journal) > 3
> > or len(complement_uc) > 5
> > or len(ref_externe) > 15
> > or len(code_periode) > 1
> > or len(lib_ecr)>30
> > or len(num_ecriture)>9
> >
> >
> > end
> > GO
> >
> >
> > Je vous remercie d'avance pour votre aide !
> > Bonne journée,
> > Anne-Laure
>
>
>
D'accord avec mes prédecesseurs, le mélange DML/DDL dans une proc stokée
n'est pas sans quelques conséquences.
Cependant, sous vous ne pouvez pas vous en passer, un contournement peut
malgré tout exister, à savoir effectuer le alter table dans un exec
(EXEC('alter table ...')).
Guillaume.
======================= > "Med Bouchenafa" a écrit :
> C'est effectivement assez surprenant!!!
> T'es bien sure que la seul difference est la ligne UPDATE
> Je conviens que ta procedure est peut etre longue et complexe mais il serait
> interessant d'essayer d'isoler le probleme en la reecrivant de facon assez
> generique en supprimant un a un les ontroles intermediaires.
> Tu t'apercevras peut etre plus facilement du bout de code responsable
> Si la fin, tu as toujours le meme probleme, publie alors le code de cette
> procedure simpliee afin de pouvoir tester
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "Anne-Laure" <AnneLaure@discussions.microsoft.com> wrote in message
> news:7EF297D3-1C37-478A-87DD-22BED5330B89@microsoft.com...
> > Bonjour,
> >
> > sous SQL server 2000, j'ai un problème dans une procédure stockée : je
> > crée
> > une table temporaire, je fais un bulk insert d'un fichier dans cette
> > table,
> > je modifie la table pour ajouter une colonne, puis je fais des contrôles
> > sur
> > les données.
> > L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
> > pas
> > le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
> >
> > voilà le code :
> >
> > CREATE PROCEDURE [dbo].ps_tap_import_GLA
> > -- importe les données du fichier du grand livre analytique dans la table
> > après différents contrôles
> > -- n'est lancée que s'il y a un fichier à intégrer
> > @cheminFichier varchar(100),
> > @nomFichier varchar(100)
> > AS
> > declare @query varchar(2000)
> > declare @result int
> > begin
> >
> > -- On créé la table Temporaire de destination
> > if exists (select uid from tempdb.dbo.sysobjects where name > > > '##GL_ANALYTIQUE')
> > drop table ##GL_ANALYTIQUE
> >
> > CREATE TABLE ##GL_ANALYTIQUE (
> > num_mvt varchar(255) NULL,
> > num_ecriture varchar (255) NULL ,
> > compte_ana_12 varchar (255) NULL ,
> > compte_gene varchar (255) NULL ,
> > code_uc_aff varchar (255) NULL ,
> > code_uc_emet varchar (255) NULL ,
> > debit varchar (255) NULL ,
> > credit varchar (255) NULL ,
> > quantite varchar (255) NULL ,
> > code_journal varchar (255) NULL ,
> > complement_uc varchar (255) NULL ,
> > ref_externe varchar (255) NULL ,
> > exercice_comptable varchar (255) NULL ,
> > mois_comptable varchar (255) NULL ,
> > code_periode varchar (255) NULL ,
> > date_enregistrement varchar (255) NULL ,
> > lib_ecr varchar(255) NULL
> > )
> >
> > set @nomFichier=@cheminFichier+@nomFichier
> > -- On insère les données du fichier dans la table temporaire
> > set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
> > ''''
> > set @query=@query+' with ('
> > set @query=@query+'fieldterminator=''t'','
> > set @query=@query+'firstrow=2,'
> > set @query=@query+'keepnulls)'
> > print @query
> > execute (@query)
> >
> > -- On ajoute un champ flag à la table temporaire
> > print 'ajout flag à la table'
> > ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
> >
> >
> > -- On contrôle les lignes
> > print 'contrôle des lignes'
> > -- longueur de champs
> > -- si l'update suivant est enlevé, la table est modifiée, tout va bien
> > -- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
> > !!!!
> > update dbo.##GL_ANALYTIQUE
> > set flag1='1'
> > where len(num_mvt) > 9
> > or len(compte_gene) > 8
> > or len(code_journal) > 3
> > or len(complement_uc) > 5
> > or len(ref_externe) > 15
> > or len(code_periode) > 1
> > or len(lib_ecr)>30
> > or len(num_ecriture)>9
> >
> >
> > end
> > GO
> >
> >
> > Je vous remercie d'avance pour votre aide !
> > Bonne journée,
> > Anne-Laure
>
>
>
D'accord avec mes prédecesseurs, le mélange DML/DDL dans une proc stokée
n'est pas sans quelques conséquences.
Cependant, sous vous ne pouvez pas vous en passer, un contournement peut
malgré tout exister, à savoir effectuer le alter table dans un exec
(EXEC('alter table ...')).
Guillaume.
======================= > "Med Bouchenafa" a écrit :
> C'est effectivement assez surprenant!!!
> T'es bien sure que la seul difference est la ligne UPDATE
> Je conviens que ta procedure est peut etre longue et complexe mais il serait
> interessant d'essayer d'isoler le probleme en la reecrivant de facon assez
> generique en supprimant un a un les ontroles intermediaires.
> Tu t'apercevras peut etre plus facilement du bout de code responsable
> Si la fin, tu as toujours le meme probleme, publie alors le code de cette
> procedure simpliee afin de pouvoir tester
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "Anne-Laure" wrote in message
> news:
> > Bonjour,
> >
> > sous SQL server 2000, j'ai un problème dans une procédure stockée : je
> > crée
> > une table temporaire, je fais un bulk insert d'un fichier dans cette
> > table,
> > je modifie la table pour ajouter une colonne, puis je fais des contrôles
> > sur
> > les données.
> > L'alter table pour ajouter une colonne fonctionne seulement si il n'y a
> > pas
> > le contrôle de donnée ensuite. Je ne comprends pas pourquoi...
> >
> > voilà le code :
> >
> > CREATE PROCEDURE [dbo].ps_tap_import_GLA
> > -- importe les données du fichier du grand livre analytique dans la table
> > après différents contrôles
> > -- n'est lancée que s'il y a un fichier à intégrer
> > @cheminFichier varchar(100),
> > @nomFichier varchar(100)
> > AS
> > declare @query varchar(2000)
> > declare @result int
> > begin
> >
> > -- On créé la table Temporaire de destination
> > if exists (select uid from tempdb.dbo.sysobjects where name > > > '##GL_ANALYTIQUE')
> > drop table ##GL_ANALYTIQUE
> >
> > CREATE TABLE ##GL_ANALYTIQUE (
> > num_mvt varchar(255) NULL,
> > num_ecriture varchar (255) NULL ,
> > compte_ana_12 varchar (255) NULL ,
> > compte_gene varchar (255) NULL ,
> > code_uc_aff varchar (255) NULL ,
> > code_uc_emet varchar (255) NULL ,
> > debit varchar (255) NULL ,
> > credit varchar (255) NULL ,
> > quantite varchar (255) NULL ,
> > code_journal varchar (255) NULL ,
> > complement_uc varchar (255) NULL ,
> > ref_externe varchar (255) NULL ,
> > exercice_comptable varchar (255) NULL ,
> > mois_comptable varchar (255) NULL ,
> > code_periode varchar (255) NULL ,
> > date_enregistrement varchar (255) NULL ,
> > lib_ecr varchar(255) NULL
> > )
> >
> > set @nomFichier=@cheminFichier+@nomFichier
> > -- On insère les données du fichier dans la table temporaire
> > set @query='bulk insert dbo.##GL_ANALYTIQUE from ''' + @nomFichier +
> > ''''
> > set @query=@query+' with ('
> > set @query=@query+'fieldterminator=''t'','
> > set @query=@query+'firstrow=2,'
> > set @query=@query+'keepnulls)'
> > print @query
> > execute (@query)
> >
> > -- On ajoute un champ flag à la table temporaire
> > print 'ajout flag à la table'
> > ALTER TABLE dbo.##GL_ANALYTIQUE ADD flag1 varchar(1) NULL
> >
> >
> > -- On contrôle les lignes
> > print 'contrôle des lignes'
> > -- longueur de champs
> > -- si l'update suivant est enlevé, la table est modifiée, tout va bien
> > -- sinon, la table n'est pas modifié, et la colonne flag1 n'existe pas
> > !!!!
> > update dbo.##GL_ANALYTIQUE
> > set flag1='1'
> > where len(num_mvt) > 9
> > or len(compte_gene) > 8
> > or len(code_journal) > 3
> > or len(complement_uc) > 5
> > or len(ref_externe) > 15
> > or len(code_periode) > 1
> > or len(lib_ecr)>30
> > or len(num_ecriture)>9
> >
> >
> > end
> > GO
> >
> >
> > Je vous remercie d'avance pour votre aide !
> > Bonne journée,
> > Anne-Laure
>
>
>