September 9, 2008 at 4:59 am
bonjour j ai rencontrer ce problem au niveau de l'integration service
et le problem c'est que cette requet ca marche sur sql server
declare @com varchar(113)
declare @buffer int
declare @buffercom varchar(1000)
declare @var varchar(10)
create table #table
(val varchar(300))
declare ved CURSOR FOR SELECT [value] from parfilux_param where rtrim(id) like 'BOOKYEAR%.PERLIB%'and value like 'rep%'
open ved
fetch NEXT from ved into @com
WHILE @@FETCH_STATUS = 0
BEGIN
set @buffer = 1
while @buffer < len(@com)
begin
set @var = (select substring(@com,@buffer,8))
set @buffercom = @var + char(10)
insert into #table (val) values (@buffercom)
set @buffer = @buffer + 8
end
FETCH NEXT FROM ved into @com
END
CLOSE ved
DEALLOCATE ved
select *
from #table
drop table #table
######## »resultat de la requête
value
----------------------------
rep 2003
jan 2003
fev 2003
rep2004
jan 2004
fev 2004
-------------------
Et ce que je demande moi c’est que d’avoir le meme resultat son utiliser les FETCH et les CURSOR parceque lorsque je mes cet requête à SSIS elle me donne cet erreur
The Declare cursor SQL construct or statement is not supported.
La requête principale est :
SELECT [value] from parfilux_param where rtrim(id) like 'BOOKYEAR%.PERLIB%'and value like 'rep%'
value
-------------
rep 2003jan 2003fev 2003
rep 2004jan 2004fev 2004
---------------
bien sur au lieu d’afficher comme cela elle doit être afficher comme le résultats précédente en plus c’est la dernier requête qui me reste
September 9, 2008 at 6:05 am
As-tu esssayé de mettre le sql dans une procedure stockée et ensuite appeler le proc stocké a partir de SSIS?
September 9, 2008 at 8:09 am
oui je l'est met et me donner un erreur en plus je sais pas comment la faire executer de "execute sql task"
September 10, 2008 at 12:01 am
Pour executer une proc stocké avec la tache 'Execute Sql' tu entre comme SQL exec spMyStoredProcedure. Apres si tu as des parametres, ca change un peu. Mais essaie deja comme ca.
Si ton SQL marche avec SSMS, mets-le deja dans un SP. Essaie dans un premier temps de l'appeler de SSMS (encore exec spMyStoredProcedure). Si tout ca fonctionne, il n'y a pas de raison que SSIS ne puisse pas faire le meme appel a la SP que tu as créée.
Je ne suis pas specialiste de SSIS mais contrairement a 99,9% des gens ici, je parle le francais. Si je peux te donner un autre conseil, c'est de poster sur un forum francophone par exemple http://sqlpro.developpez.com/ (ou bien de poster en anglais, si tu peux.) Autrement tu risque de ne pas avoir beaucoup de réponses 😉
September 10, 2008 at 12:25 am
Si t'as pas envie d'utiliser un Cursor, regarde le SQL en dessous.
Faudrait l'adapter!
1) Faut creer la table Tally (merci Jeff Moden) directement dans la base et pas a chaque fois que tu appelle le code. c'est a dire tu la cree une seule fois, ta table Tally. (C'est juste une table de chiffres - et c'est d'ailleurs tres utile d'avoir.)
2) Moi, j'ai cree 10 chiffres dans la table Tally, qui suppose que tu n'auras pas plus que 10 'dates'. Si le chiffre 10 ne te convient pas, suffit de l'augmenter.
declare @com varchar(113)
declare @buffer int
declare @buffercom varchar(1000)
declare @var varchar(10)
IF OBJECT_ID('dbo.Tally') IS NOT NULL
DROP TABLE dbo.Tally
CREATE TABLE dbo.Tally
(
N INT,
CONSTRAINT PK_Tally_N PRIMARY KEY CLUSTERED ( N )
)
--===== Create and preset a loop counter
DECLARE @Counter INT SET @Counter = 1
--===== Populate the table using the loop and couner
WHILE @Counter <= 10
BEGIN
INSERT INTO
dbo.Tally ( N )
VALUES
( @Counter )
SET @Counter = @Counter + 1
END
drop table #parfilux_param
create table #parfilux_param ( xvalue varchar(300) )
insert into
#parfilux_param ( xvalue )
VALUES
(
'rep 2003jan 2003fev 2003'
)
insert into
#parfilux_param ( [xvalue] )
VALUES
(
'rep 2004jan 2004fev 2004'
)
select substring(xvalue,N*8-7,8) from Tally, #parfilux_param
where N*8<=len(xvalue)
September 10, 2008 at 12:26 am
Faut remplacer les 😉 avec une )
September 10, 2008 at 3:37 am
merci de votre reponse mais ce que je vx bah en j ai deja créer la table parafi._param et il ya 14 chiffre ca commence du rep jusqu'a clo 2003
et si tu as plusieur comment je le ferais au lieu d'inserer j ai les données ds la table et si ta rep 2003...rep 2004 ....rep 2005 ....rep 2%%%
comment le faire
September 10, 2008 at 3:44 am
Copier les lignes dant une table temporaire
En prenant le count du nombre de ligne,
Tu peux faire un while pour le nombre de ligne
Prendre la première ligne avec « select top 1 »
Effacer la ligne après traitement (la boucle que tu utilises) avec « delete top 1 »
A+
px tu le faire car j'arrive pas a le faire
September 10, 2008 at 3:48 am
desole...mais je n'ai rien compris de ta reponse! Peux tu etre plus clair...avec des exemples.
September 10, 2008 at 3:53 am
ca marchée sur sql mais sa reste tjrs le problem de SSIS
est ce qu'il ya une solution sont faire la declaration
September 10, 2008 at 3:54 am
ce que tu dois comprendre c'est qu'il faut PAS mettre le sql dans SSIS!
Il faut mettre uniquement le 'exec xxxxxxx' dans SSIS.
September 10, 2008 at 3:58 am
car SSIS ne connais pas declare donc je demande s'il ya une solution pour cela et merci d'avance
September 10, 2008 at 4:00 am
in english please if possible...:)
"Keep Trying"
September 10, 2008 at 4:01 am
mais si tu px faire commande sql sous SSIS au lieu de faire appler la table
September 10, 2008 at 4:03 am
SSIS do not know "declare" in sql therefore I ask if there is a solution for that and thank you in advance
Viewing 15 posts - 1 through 15 (of 20 total)
You must be logged in to reply to this topic. Login to reply