日期:2014-05-17  浏览次数:20928 次

指定了非布尔类型的表达式---问题!

CREATE PROC SF_OP3_set_color s_text NVARCHAR(100),@C_result NVARCHAR(1) OUTPUT
AS 
BEGIN
if (select top 1 id from tab where @s_text)>0 
set @C_result='1' else @C_result='0'
END

@s_text是一些逻辑表达式,比方:id>50 AND ID<100
现在问题出现:指定了非布尔类型的表达式。
如何修改!
SQL

------解决方案--------------------
CREATE PROC SF_OP3_set_color 
@s_text NVARCHAR(100),
@C_result NVARCHAR(1) OUTPUT
AS 
BEGIN
    exec('select top 1 id from tab where '+@s_text)
    SET @C_result=SIGN(@@ROWCOUNT) 
END

------解决方案--------------------
select top 1 id from tab where @s_text这种方法是错误的,需要动态拼接执行,而且好多语法错误。。

CREATE PROC SF_OP3_set_color 
@s_text NVARCHAR(100),@C_result NVARCHAR(1) OUTPUT
AS 
BEGIN
declare @sql nvarchar(1000),@id int
set @sql='select @id=count(id) from tab where '+@s_text
exec sp_executesql @sql,N'@id int out',@id out
if @id>0 set @C_result='1' 
else set @C_result='0'
END

------解决方案--------------------
CREATE PROC SF_OP3_set_color 
@s_text NVARCHAR(100),
@C_result NVARCHAR(1) OUTPUT
AS 
begin
if (select  top 1 convert(int,id) from tab>0 
set @C_result='1' 
else
set @C_result='0'
end
如果if的sql 能执行(不含传进来的逻辑表达式),则可以你那样写,否则就参考楼上的写法