none
Tabela Temporaria Fase 2 RRS feed

  • Pergunta

  •  

    Galera desculpa em abrir novo tópico no forum.

    Criei uma tabela temporaria e agora preciso fazer um loop nela, como faço isso?

     

    DECLARE

    @SecurityIDType as char(1),

    @ContryIncorp as char(2),

    @CountryList as char(2),

    @FidPosition as char(1),

    @dtOperation as varchar(8)

    SET @SecurityIDType = 'I';

    SET @ContryIncorp = 'BR';

    SET @CountryList = 'BR';

    SET @FidPosition = 'N';

    SET @dtOperation = '20081202';

    -- Ativos na carteira

    SELECT

    stock.Stockid,

    Stock.Available,

    stock.AccountId AS Carrying,

    enti.Name,

    @SecurityIDType AS SecurityIDType,

    @ContryIncorp AS ContryIncorp,

    @CountryList AS CountryList,

    @FidPosition AS FidPosition,

    '0' as SecType

    -- Cria tabela temporaria e inclui os dados

    INTO #teste

    FROM Account AS acc

    LEFT JOIN Entity AS enti ON

    acc.EntityId = enti.id

    LEFT JOIN StockShare AS stock ON

    stock.AccountId = acc.id

    LEFT JOIN company AS comp ON

    comp.id = stock.Stockid

    WHERE stock.date = @dtOperation

    group by stock.Stockid,

    stock.Available,

    stock.AccountId,

    enti.Name

     

    Obrigado

    quinta-feira, 4 de dezembro de 2008 19:34

Respostas

Todas as Respostas

  • Olá SirSmart,

     

    Porque você precisa fazer um loop nela ?

     

    [ ]s,

     

    Gustavo

     

    quinta-feira, 4 de dezembro de 2008 19:43
  • Pq para cada registro que conter nela, eu tenho que passar o id para uma função.

     

    Att,

    quinta-feira, 4 de dezembro de 2008 19:58
  • Olá SirSmart,

     

    E que função seria essa ? Talvez haja uma forma mais eficiente do que fazer um loop

     

    [ ]s,

     

    Gustavo

     

    quinta-feira, 4 de dezembro de 2008 20:07
  • Na verdade é uma função que me retorna um valor PS ou PN.

    Eu preciso passar o id do select acima para essa função, ou seja, cada registro devo passar seu id.

    Não sei se tem alguma maneira mais fácil de fazer. Mas vc acha que vai gerar muito processamento, para fazer isso ?

     

    Obrigado 

     

    quinta-feira, 4 de dezembro de 2008 23:01
  • pode ser mais se vc. precisa determinar somente o estado apartir de uma coluna ou vc. pode colocar colocar mais um join ou ate mesmo criar uma funcao in line e colocar no seu select junto passando o id +- assim

     

    create function retornatipo @id int

    returns char(01)

    Begin

     

    declare @ret char(01)

      If @id < 10

         Select @ret = 'A'

     

    ....

     

    Return @ret

     

    ---

     

    dai usa assim

     

    selecrt id, dbo.retonatipo(id) .... from tabela ....

     

    a melhor forma seria ter uma tabela com as regras para o tipo de retorno e colocar no join, mais o loop no meu ponto de vista e desnecessario neste caso.

     

     

    veja se ajuda,

     

    Abs;

     

     

       

     

     

    sexta-feira, 5 de dezembro de 2008 09:55
  • Então na verdade eu tenho essa tabela temporaria e estou colocando todos os meus campos em uma tabela só para a saida ser unica, ou seja, ficar mais fácil no desenvolviemento do sistema.

    A função já está ponta, porem eu preciso passar o id do select acima para essa função, eis a função:

    fu_bo_stock(id)

     

    Eu consigo colocar essa função para rodar junto com o select acima apresentado, pq eu não sei como pegar o id de cada registro da tabela #teste e passar para a função, a não ser que seja atraves de um loop....

     

    Existe alguma outra maneira?

     

    Obrigado

    sexta-feira, 5 de dezembro de 2008 11:29
  • Olá SirSmart,

     

    As considerações do Colla estão muito adequadas para o seu caso. Não utilize loops, pois, são mais lentos e acredito que desnecessários para o seu caso. Apenas use a função sobre a coluna. Ex:

     

    SELECT fu_bo_stock(SuaColuna) FROM Tabela

     

    [ ]s,

     

    Gustavo

    sexta-feira, 5 de dezembro de 2008 11:33
  • Fiz o seguinte:

     

    DROP TABLE #teste

    DECLARE

    @SecurityIDType as char(1),

    @ContryIncorp as char(2),

    @CountryList as char(2),

    @FidPosition as char(1),

    @dtOperation as varchar(8),

    @StockID as varchar(15)

    SET @SecurityIDType = 'I';

    SET @ContryIncorp = 'BR';

    SET @CountryList = 'BR';

    SET @FidPosition = 'N';

    SET @dtOperation = '20081202';

     

    -- Ativos na carteira

    SELECT

    stock.Stockid,

    Stock.Available,

    stock.AccountId AS Carrying,

    enti.Name,

    @SecurityIDType AS SecurityIDType,

    @ContryIncorp AS ContryIncorp,

    @CountryList AS CountryList,

    @FidPosition AS FidPosition,

    @StockID = (SELECT fu_bo_stock(stock.Stockid))

    '0' as SecType

    -- Cria tabela temporaria e inclui os dados

    INTO #teste

    FROM Account AS acc

    LEFT JOIN Entity AS enti ON

    acc.EntityId = enti.id

    LEFT JOIN StockShare AS stock ON

    stock.AccountId = acc.id

    LEFT JOIN company AS comp ON

    comp.id = stock.Stockid

    WHERE stock.date = @dtOperation

    group by stock.Stockid,

    stock.Available,

    stock.AccountId,

    enti.Name

    select * from #teste;

     

    Está me dando o seguinte erro:

     

    'fu_bo_stock' is not a recognized built-in function name.

     

    É isso mesmo que tenho que fazer?

     

    Obrigado

     

    sexta-feira, 5 de dezembro de 2008 11:38
  • SirSmart,

     

    O SQL Server esta informando que a função não existe ou não foi reconhecida, tente executar a função da seguinte forma:

     

    Code Snippet

    @StockID = (SELECT dbo.fu_bo_stock(stock.Stockid))

     

     

    sexta-feira, 5 de dezembro de 2008 11:59
  • Desculpa gente era isso mesmo , mas agora está me retornando o seguinte erro:

     

    A SELECT INTO statement cannot contain a SELECT statement that assigns values to a variable.

     

    Att,

    sexta-feira, 5 de dezembro de 2008 12:08
  • Olá SirSmart,

     

    Tente o seguinte:

     

    Code Snippet

    DROP TABLE #teste

    DECLARE

    @SecurityIDType as char(1),

    @ContryIncorp as char(2),

    @CountryList as char(2),

    @FidPosition as char(1),

    @dtOperation as varchar(8),

    @StockID as varchar(15)

    SET @SecurityIDType = 'I';

    SET @ContryIncorp = 'BR';

    SET @CountryList = 'BR';

    SET @FidPosition = 'N';

    SET @dtOperation = '20081202';

    -- Ativos na carteira

    SELECT

    stock.Stockid,

    Stock.Available,

    stock.AccountId AS Carrying,

    enti.Name,

    @SecurityIDType AS SecurityIDType,

    @ContryIncorp AS ContryIncorp,

    @CountryList AS CountryList,

    @FidPosition AS FidPosition,

    fu_bo_stock(stock.Stockid) As Res,

    '0' as SecType

    -- Cria tabela temporaria e inclui os dados

    INTO #teste

    FROM Account AS acc

    LEFT JOIN Entity AS enti ON

    acc.EntityId = enti.id

    LEFT JOIN StockShare AS stock ON

    stock.AccountId = acc.id

    LEFT JOIN company AS comp ON

    comp.id = stock.Stockid

    WHERE stock.date = @dtOperation

    group by stock.Stockid,

    stock.Available,

    stock.AccountId,

    enti.Name

     

     

     

    Troque o nome "Res" por outro que achar mais apropriado.

     

    [ ]s,

     

    Gustavo

    sexta-feira, 5 de dezembro de 2008 12:35
  • Me retornou o seguinte erro:

     

    'fu_bo_stockcode' is not a recognized built-in function name.

     

    Abraço

    sexta-feira, 5 de dezembro de 2008 12:45
  • Ops,

     

    Coloque dbo.fu_bo_stockcode

     

    [ ]s,

     

    Gustavo

    sexta-feira, 5 de dezembro de 2008 12:52
  • Obrigado gente pela paciencia, deu certo?

     

    Vou abrir outro tópico referente ao case que preciso fazer.

     

    Abraço a todos

     

    sexta-feira, 5 de dezembro de 2008 13:16