1 DECLARE @InsertLogRoleName NVARCHAR(2000) --需要插入表单日志的角色名称 2 DECLARE @Sql NVARCHAR(2000) 4 DECLARE @ParaDefinition NVARCHAR(500) 5 DECLARE @Num INT 6 BEGIN 8 SELECT @Result = 0 10 SELECT @Sql = N'SELECT @Num = count(*) FROM SYS_BPS_USERELEMENTS WHERE ltrim(rtrim(UE_CatSPM1)) IN (@AllRoles) ' 11 --获取所有要插入表单日志的角色名称 12 SELECT @InsertLogRoleName = Role FROM FormLogConfig WHERE ValidataType = 1 13 14 --获取用户角色信息,然后比对需要插入表单日志的角色,如果,比对成功,则需插入表单日志 15 SELECT @ParaDefinition = N'@Num INT OUT, @AllRoles NVARCHAR(200)' 16 PRINT @Num 17 EXECUTE sp_executesql @Sql, @ParaDefinition, @Num = @Result OUT, @AllRoles = @InsertLogRoleName, @UE_SPM1 = @User_Account
上面第10条语句in关键字后的参数AllRoles,值为 '系统管理员','Admin' ,但是为什么输出Num总是0,
而我直接这样:
SELECT @Sql = N'SELECT @Num = count(*) FROM SYS_BPS_USERELEMENTS WHERE ltrim(rtrim(UE_CatSPM1)) IN (''系统管理员'',''Admin'' ) '
输出Num就得到正确答案,为什么?
EXECUTE(@Sql) 这样执行试试
貌似两者单引号出不同
PRINT @Num
EXECUTE sp_executesql @Sql, @ParaDefinition, @Num = @Result OUT, @AllRoles = @InsertLogRoleName, @UE_SPM1 = @User_Account
你还没执行sql语句 输出当然是0了 你吧 PRINT @Num 放到最后试下