Alter table dans procédure stockée
Bonjour à tous,
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...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| 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 |
Merci d'avance pour votre aide !