【问题标题】:Select more values on clause IF in the stored procedure在存储过程中的子句 IF 上选择更多值
【发布时间】:2019-03-28 16:16:20
【问题描述】:

当在我的 IF 中选择更多值时,我的存储过程中有语法问题,代码 sn-p 37 OR 35。

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 的许可。

【问题讨论】:

  • 你真的不应该将你的参数值注入到你的动态 sql 中,你应该参数化 sp_executesql 语句
  • 另外,这些变量是字符串吗?列是字符串吗?强类型参数将完全避免这个问题(它在安全性之后的次要目的),但使用当前代码,您需要正确分隔值。
  • 虽然其他人已经猜到了(显然是猜错了),但无法从损坏的代码和描述的措辞中看出您的意图。我不知道这意味着什么:“当在我的 IF 中选择更多值时,在代码 sn-p 37 OR 35 上。/我需要 Id 37 和 35 的权限。”如果您提供示例数据和期望的结果,这可能会使问题更清楚。
  • 如果您省略了工作中的35 not in ... 而只是拥有if 37 begin ...,您会期待什么?
  • 我通常不会在回答问题时费心猜测,但这似乎很容易猜测。你应该edit你的问题provide all the relevant details,

标签: sql sql-server tsql stored-procedures


【解决方案1】:

试试下面的

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 来更新我的答案,因为它可能会解决您的问题。
【解决方案2】:

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

它一直是这样的:

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多