【发布时间】: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