USANDO IF NO SQL
Bom dia pessoal
Estou criando um script para ajustar algumas coisas no banco de dados de meus clientes...
Porem preciso consultar se o cliente é CRT=1 (Simples Nacional) ou CRT=3 (Lucro Presumido)...
Baseado nisso ele vai fazer as alterações para aquele regime
fiz assim
Fiz conforme alguns exemplos que vi na internet, porem sempre dar o erro:
[txt-color=#e80000]Mensagem 156, NÃÂvel 15, Estado 1, Linha 6
Sintaxe incorreta próxima àpalavra-chave "ELSE".[/txt-color]
Estou criando um script para ajustar algumas coisas no banco de dados de meus clientes...
Porem preciso consultar se o cliente é CRT=1 (Simples Nacional) ou CRT=3 (Lucro Presumido)...
Baseado nisso ele vai fazer as alterações para aquele regime
fiz assim
IF
(SELECT COUNT(CRT) AS var_Quant FROM empresa WHERE (CRT = 1)) > 0
Update Produtos Set ICMSCST = 102 WHERE CFOP = 5102
Update Produtos Set ICMSCST = 500 WHERE CFOP = 5405
Update Produtos Set ICMSCST = 102, CFOP = 5102 WHERE CFOP <> 5102 AND CFOP <> 5405
ELSE
Update Produtos Set ICMSCST = "000" WHERE CFOP = 5102 AND ICMSCST <> "000"
Update Produtos Set ICMSCST = "060" WHERE CFOP = 5405
Update Produtos Set ICMSCST = "000", CFOP = 5102 WHERE CFOP <> 5102 AND CFOP <> 5405
GO
Fiz conforme alguns exemplos que vi na internet, porem sempre dar o erro:
[txt-color=#e80000]Mensagem 156, NÃÂvel 15, Estado 1, Linha 6
Sintaxe incorreta próxima àpalavra-chave "ELSE".[/txt-color]
Assumindo que seja SQL Server, a forma como voce usou só permite uma instrução SQL dentro do IF e do ELSE, porém voce tem 3, nesse caso voce precisa usar o BEGIN e END para delimitar os blocos, algo do tipo
IF (SELECT COUNT(CRT) AS var_Quant FROM empresa WHERE (CRT = 1)) > 0
BEGIN
Update Produtos Set ICMSCST = 102 WHERE CFOP = 5102
Update Produtos Set ICMSCST = 500 WHERE CFOP = 5405
Update Produtos Set ICMSCST = 102, CFOP = 5102 WHERE CFOP <> 5102 AND CFOP <> 5405
END
ELSE
BEGIN
Update Produtos Set ICMSCST = "000" WHERE CFOP = 5102 AND ICMSCST <> "000"
Update Produtos Set ICMSCST = "060" WHERE CFOP = 5405
Update Produtos Set ICMSCST = "000", CFOP = 5102 WHERE CFOP <> 5102 AND CFOP <> 5405
END
Citação::
Assumindo que seja SQL Server, a forma como voce usou só permite uma instrução SQL dentro do IF e do ELSE, porém voce tem 3, nesse caso voce precisa usar o BEGIN e END para delimitar os blocos, algo do tipoIF (SELECT COUNT(CRT) AS var_Quant FROM empresa WHERE (CRT = 1)) > 0
BEGIN
Update Produtos Set ICMSCST = 102 WHERE CFOP = 5102
Update Produtos Set ICMSCST = 500 WHERE CFOP = 5405
Update Produtos Set ICMSCST = 102, CFOP = 5102 WHERE CFOP <> 5102 AND CFOP <> 5405
END
ELSE
BEGIN
Update Produtos Set ICMSCST = "000" WHERE CFOP = 5102 AND ICMSCST <> "000"
Update Produtos Set ICMSCST = "060" WHERE CFOP = 5405
Update Produtos Set ICMSCST = "000", CFOP = 5102 WHERE CFOP <> 5102 AND CFOP <> 5405
END
Executei, NÃO DEU MAIS ERRO
Murei o CRT no cadastro da empresa para 3 e rodei novamente
Porem o que tava no ELSE:
Update Produtos Set ICMSCST = "000" WHERE CFOP = 5102 AND ICMSCST <> "000"
Update Produtos Set ICMSCST = "060" WHERE CFOP = 5405
Update Produtos Set ICMSCST = "000", CFOP = 5102 WHERE CFOP <> 5102 AND CFOP <> 5405
Não alterou nada no banco de dados... sem erro e sem alterações
exemplo: tinha muitos produtos com ICMSCST = 102 que deveriam mudar para 000 e não mudaram
Verifique bem os tipos dos campos, os updates do primeiro caso estão diferentes do segundo no que diz respeito àtipos de campos.
Faça seu login para responder