USANDO IF NO SQL

AMELINHACODE 03/02/2023 11:06:39
#500995
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
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]
OCELOT 03/02/2023 11:57:11
#500996
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
AMELINHACODE 03/02/2023 12:18:45
#500997
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 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



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
KERPLUNK 07/02/2023 14:52:38
#501006
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