bertani 0 Denunciar post Postado Julho 28, 2011 Pessoal, estou com um problema que não consigo entender. Fiz um comando sql que quando jogo na aplicação, ele retorna 2 erros, sendo que ao executar no no Management Studio executa normalmente. Segue o que fiz: try { SqlConnection conn = new SqlConnection(@"Server=Server;Database=base;Uid=teste;Pwd=teste;"); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; conn.Open(); cmd.CommandText = "SELECT DISTINCT EMV01.EMP_FIL, EMV01.DT_MOVTO, EMV01.SEQ, EMV01.C_PROD, ESTOQUE.DESCR_1," + "EMV01.TIPO_MOVTO, EMV01.QTDE," + "CASE WHEN ETM01.ES_ARM ='E' THEN QTDE ELSE 0 END AS QTDE_ENT," + "CASE WHEN ETM01.ES_ARM='S' THEN QTDE ELSE 0 END AS QTDE_SAI," + "CASE WHEN ETM01.ES_ARM='I' OR ETM01.ES_USO='I' THEN QTDE ELSE 0 END AS QTDE_INV, EMV01.ID_CANCEL" + "FROM EMV01 LEFT JOIN" + "(SELECT DESCR_1, DESCR_1 + ' ' + DESCR_2 AS DESCRICAO, C_PROD AS PROD, DEPOSITO AS DEP, ESTAB AS EST, EMP_FIL AS FIL" + "FROM TESTEDB_ME.DBO.ESTQ" + "WHERE(ESTAB = 1) AND (DEPOSITO = 1)) AS ESTOQUE" + "ON (EMV01.C_PROD COLLATE SQL_Latin1_general_cp1_ci_as = PROD) AND (EMV01.DEPOSITO = DEP) AND (EMV01.ESTAB = EST) AND " + "(EMV01.EMP_FIL = EMP_FIL) LEFT JOIN ETM01 ON EMV01.TIPO_MOVTO = ETM01.TIPO_MOVTO" + "WHERE (EMV01.EMP_FIL = EMP_FIL) AND (EMV01.DT_MOVTO = DT_MOVTO) AND" + "(EMV01.ID_CANCEL Is Null) AND (EMV01.C_PROD LIKE 'PRODUTO%') AND (ESTOQUE.DESCR_1 = DESCR_1)" + "ORDER BY EMV01.EMP_FIL, EMV01.DT_MOVTO, EMV01.SEQ"; cmd.ExecuteReader(); conn.Close(); } catch (Exception) { throw; } } O erro que retorna é: Sintaxe incorreta próximo ao LEFT e próximo ao TESTEDB_ME. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
João Arruda 0 Denunciar post Postado Julho 28, 2011 O problema é que você não está deixando espaços entre as palavras chave, aí ele não consegue interpretar. Exemplo: "CASE WHEN ETM01.ES_ARM='I' OR ETM01.ES_USO='I' THEN QTDE ELSE 0 END AS QTDE_INV, EMV01.ID_CANCEL" + "FROM EMV01 LEFT JOIN" Ele interpretaria como algo assim: CASE WHEN ETM01.ES_ARM='I' OR ETM01.ES_USO='I' THEN QTDE ELSE 0 END AS QTDE_INV, EMV01.ID_CANCELFROM EMV01 LEFT JOIN Porque você não deu o espaçamento adequado para separar as palavras. Tente fazer assim: cmd.CommandText = "SELECT DISTINCT EMV01.EMP_FIL, EMV01.DT_MOVTO, EMV01.SEQ, EMV01.C_PROD, ESTOQUE.DESCR_1," + "EMV01.TIPO_MOVTO, EMV01.QTDE," + "CASE WHEN ETM01.ES_ARM ='E' THEN QTDE ELSE 0 END AS QTDE_ENT," + "CASE WHEN ETM01.ES_ARM='S' THEN QTDE ELSE 0 END AS QTDE_SAI," + "CASE WHEN ETM01.ES_ARM='I' OR ETM01.ES_USO='I' THEN QTDE ELSE 0 END AS QTDE_INV, EMV01.ID_CANCEL " + "FROM EMV01 LEFT JOIN " + "(SELECT DESCR_1, DESCR_1 + ' ' + DESCR_2 AS DESCRICAO, C_PROD AS PROD, DEPOSITO AS DEP, ESTAB AS EST, EMP_FIL AS FIL " + "FROM TESTEDB_ME.DBO.ESTQ " + "WHERE(ESTAB = 1) AND (DEPOSITO = 1)) AS ESTOQUE " + "ON (EMV01.C_PROD COLLATE SQL_Latin1_general_cp1_ci_as = PROD) AND (EMV01.DEPOSITO = DEP) AND (EMV01.ESTAB = EST) AND " + "(EMV01.EMP_FIL = EMP_FIL) LEFT JOIN ETM01 ON EMV01.TIPO_MOVTO = ETM01.TIPO_MOVTO " + "WHERE (EMV01.EMP_FIL = EMP_FIL) AND (EMV01.DT_MOVTO = DT_MOVTO) AND " + "(EMV01.ID_CANCEL Is Null) AND (EMV01.C_PROD LIKE 'PRODUTO%') AND (ESTOQUE.DESCR_1 = DESCR_1) " + "ORDER BY EMV01.EMP_FIL, EMV01.DT_MOVTO, EMV01.SEQ"; Compartilhar este post Link para o post Compartilhar em outros sites
bertani 0 Denunciar post Postado Julho 28, 2011 João, funcionou perfeitamente. Fiz da maneira que publicou e esta ok. Vou modificar os outros scritps que estavam dando o mesmo problema e irá funcionar. Valeu demais Abraço Compartilhar este post Link para o post Compartilhar em outros sites