none
Erro em select usando XML PATH RRS feed

  • Pergunta

  • Bom dia amigos!

    Estou tendo um problema em um subselect. No SQL Server ele roda normalmente. No sistema em que estou colocando ele, uma vez que este sistema permite criar consultas customizadas, ele retorna um erro. Quando retiro este subselect do select, ele roda normal a consulta sem erro. O subselect e o erro estão abaixo. Gostaria de saber se existe outra forma de fazer o que preciso, pois o único jeito que consegui foi por XML PATH. O resultado que preciso também está exemplificado abaixo:

     

    SELECT LEFT(Cont,len(Cont)-1) from (SELECT (SELECT  COALESCE(
    (SELECT CAST(Z.NUMERO AS VARCHAR(8000)),', ' AS [text()] 
    FROM GLOP_VIAGENS X
    INNER JOIN GLOP_CONTRATOFRDOCUMENTOS Y ON X.HANDLE = Y.VIAGEM
    INNER JOIN GLOP_CONTRATOFRETES Z ON Y.CONTRATOFRETE = Z.HANDLE
    WHERE X.HANDLE=E02.HANDLE AND Z.STATUS NOT IN(433)GROUP BY X.HANDLE,Z.NUMERO
    FOR XML PATH(''), TYPE).value('.[1]', 'VARCHAR(MAX)'),''))+

    (ISNULL((SELECT  COALESCE(
    (SELECT CAST(W.NUMERO AS VARCHAR(8000)),', ' AS [text()] 
    FROM GLOP_VIAGENS X
    INNER JOIN GLOP_CONTRATOFRDOCUMENTOS Y ON X.HANDLE = Y.VIAGEM
    INNER JOIN GLOP_CONTRATOFRETES Z ON Y.CONTRATOFRETE = Z.HANDLE
    LEFT JOIN GLOP_CONTRATOFRETES W ON Z.HANDLE = W.CONTRATOORIGEM
    WHERE X.HANDLE=E02.HANDLE AND W.STATUS NOT IN(433) GROUP BY X.HANDLE,W.NUMERO
    FOR XML PATH(''), TYPE).value('.[1]', 'VARCHAR(MAX)'),'')),''))AS Cont)AS Contrato) AS CONTRATOS

    Obrigado!

    quarta-feira, 15 de maio de 2013 15:16

Respostas

  • Marcelo,

    Por acaso você esta utilizando para se conectar ao seu banco de dados alguma conexão ODBC? Se tive este problema de Quoted_Identifier quando estava realizando uma conexão com uma base Microsiga através do ODBC que apresentava habilitado a configuração para o limitador de string.

    Isso esta relacionado também se você estiver utilizando a Diretiva Set_Quoted_Identifier, veja o exemplo abaixo:

    SET QUOTED_IDENTIFIER OFF
    GO
    -- An attempt to create a table with a reserved keyword as a name
    -- should fail.
    CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL)
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- Will succeed.
    CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL)
    GO
    
    SELECT "identity","order" 
    FROM "select"
    ORDER BY "order"
    GO
    
    DROP TABLE "SELECT"
    GO
    
    SET QUOTED_IDENTIFIER OFF
    GO
    


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quinta-feira, 16 de maio de 2013 16:43

Todas as Respostas

  • Marcelo,

    Por acaso você esta utilizando para se conectar ao seu banco de dados alguma conexão ODBC? Se tive este problema de Quoted_Identifier quando estava realizando uma conexão com uma base Microsiga através do ODBC que apresentava habilitado a configuração para o limitador de string.

    Isso esta relacionado também se você estiver utilizando a Diretiva Set_Quoted_Identifier, veja o exemplo abaixo:

    SET QUOTED_IDENTIFIER OFF
    GO
    -- An attempt to create a table with a reserved keyword as a name
    -- should fail.
    CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL)
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- Will succeed.
    CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL)
    GO
    
    SELECT "identity","order" 
    FROM "select"
    ORDER BY "order"
    GO
    
    DROP TABLE "SELECT"
    GO
    
    SET QUOTED_IDENTIFIER OFF
    GO
    


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quinta-feira, 16 de maio de 2013 16:43
  • Ótimo Júnior,

    Resolveu, só tive que setar ON os parâmetros ANSI_NULLS, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS e ANSI_PADDING.

    Obrigado!!


    Marcelo C. Nascimento

    quinta-feira, 16 de maio de 2013 17:15