Sql 如果在存储过程中,请在子句IF中选择更多值

Sql 如果在存储过程中,请在子句IF中选择更多值,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,在代码段37或35上,当在IF中选择更多值时,存储过程中出现语法问题 IF 37 OR 35 NOT IN (SELECT CodPerfilSistema FROM [BRSAODB09].[ADMIN].[dbo].[PERFIL_USUARIO] WHERE CodUsuario = @pCodUsuario) BEGIN SET @CondicaoEmpresa = ' AND [Lote].Co

在代码段37或35上,当在IF中选择更多值时,存储过程中出现语法问题

IF 37 OR 35 NOT IN (SELECT CodPerfilSistema 
                    FROM [BRSAODB09].[ADMIN].[dbo].[PERFIL_USUARIO] 
                    WHERE CodUsuario = @pCodUsuario)
BEGIN
    SET @CondicaoEmpresa = ' AND [Lote].CodEmpresa = ' +  CONVERT(varchar(10), @pCodEmpresa);
    SET @CondicaoProjeto = ' AND [AUD_Projeto].CodProjeto = ' +  CONVERT(varchar(10), @pCodProjeto);
END
我试过上面的代码

下面是代码的运行方式

 IF 37 NOT IN (SELECT CodPerfilSistema 
               FROM [BRSAODB09].[ADMIN].[dbo].[PERFIL_USUARIO] 
               WHERE CodUsuario = @pCodUsuario)
BEGIN
    SET @CondicaoEmpresa = ' AND [Lote].CodEmpresa = ' +  CONVERT(varchar(10), @pCodEmpresa);
    SET @CondicaoProjeto = ' AND [AUD_Projeto].CodProjeto = ' +  CONVERT(varchar(10), @pCodProjeto);
END
我需要Id 37和35的许可。

请尝试以下操作

IF not exists (SELECT * FROM [BRSAODB09].[ADMIN].[dbo].[PERFIL_USUARIO] where CodUsuario = @pCodUsuario
        and CodPerfilSistema in (37,35))
BEGIN
    SET @CondicaoEmpresa = ' AND [Lote].CodEmpresa = ' +  CONVERT(varchar(10), @pCodEmpresa);
    SET @CondicaoProjeto = ' AND [AUD_Projeto].CodProjeto = ' +  CONVERT(varchar(10), @pCodProjeto);
END

谢谢大家的帮助,我找到了解决问题的方法

它一直是这样的:

IF NOT EXISTS(
SELECT 1 
FROM [BRSAODB09].[ADMIN].[dbo].[PERFIL_USUARIO] 
WHERE CodUsuario = @pCodUsuario
AND  CodPerfilSistema IN(37,35)
)
BEGIN
     SET @CondicaoEmpresa = ' AND [Lote].CodEmpresa = ' +  CONVERT(varchar(10), 
     @pCodEmpresa);

     SET @CondicaoProjeto = ' AND [AUD_Projeto].CodProjeto = ' +  CONVERT(varchar(10), 
     @pCodProjeto);
END 

您真的不应该将参数的值注入到动态sql中,您应该对sp_executesql语句进行参数化。还有,这些变量是字符串吗?这些列是字符串吗?强类型参数将完全避免这个问题,这是继安全性之后的第二个目的,但对于当前代码,您需要正确地定义值。尽管其他人的猜测显然是错误的,但无法从损坏的代码和描述的措辞中看出您的意图。我不知道这意味着什么:当在IF中选择更多值时,在代码段37或35上我需要37号和35号身份证的许可。如果你提供了样本数据和期望的结果,这可能会使问题更清楚。如果你遗漏了工作35不在。。。如果37开始。。。你会期待什么?我通常在回答问题时不费心猜测,但这似乎是一个简单的猜测。你应该让你的问题没有返回任何东西。因为我对数据或查询的其他部分一无所知,所以很难预测你想要什么。无论如何,我更新了我的答案,在IF后面加了一个not,因为它可能会解决你的问题。