sql server

  • 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

  • As-tu esssayé de mettre le sql dans une procedure stockée et ensuite appeler le proc stocké a partir de SSIS?

  • oui je l'est met et me donner un erreur en plus je sais pas comment la faire executer de "execute sql task"

  • 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 😉

  • 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)

  • Faut remplacer les 😉 avec une )

  • 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

  • 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

  • desole...mais je n'ai rien compris de ta reponse! Peux tu etre plus clair...avec des exemples.

  • ca marchée sur sql mais sa reste tjrs le problem de SSIS

    est ce qu'il ya une solution sont faire la declaration

  • 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.

  • car SSIS ne connais pas declare donc je demande s'il ya une solution pour cela et merci d'avance

  • in english please if possible...:)

    "Keep Trying"

  • mais si tu px faire commande sql sous SSIS au lieu de faire appler la table

  • 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