Usuário com melhor resposta
Erro em select usando XML PATH

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 CONTRATOSObrigado!
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]
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 20 de abril de 2017 23:33
- Marcado como Resposta Robson William Silva sexta-feira, 21 de abril de 2017 12:44
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]
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 20 de abril de 2017 23:33
- Marcado como Resposta Robson William Silva sexta-feira, 21 de abril de 2017 12:44
-
Ó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
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 20 de abril de 2017 23:33