1.存储过程如下:
CREATE PROCEDURE dbo.GetWSFW
@SqlStr varchar(100)
AS
DECLARE 
@NumM numeric(9),
@NumW numeric(9)
--计算0-7岁的人数
SELECT @NumM=COUNT(*) FROM personinfo where xingbie='男' and DATEDIFF(year,shengri,getdate())>=0 and DATEDIFF(year,shengri,getdate())<8+@SqlStr
2.我用的是adoStoreProc控件,PoecudreName设为了GetWSFW
Paramters 增加一字段Sqlstr,并且其DataType为ftString,Direction为pdInput
3.procedure TfrmWSFU.MyExecProc(strCon: string);
var
  strText: string;
begin
  with adoProc do
    begin
      Close;
      Parameters.ParamByName('SqlStr').Value := strCon;
      ExecProc;
    end;
end;
4.当我硬性给他加条件
  strCon:=' and 1=1 ',
  MyExecProc(strCon);
当执行些存储过程时老是报
将varchar值' and personInfo.personcode like '01%' and personInfo.gxy='有'转换为数据类型为int的列时发生语法错误 '。
当我myExecProc('')时可以正常执行。加了参数就不对,不知为什么。谢谢

解决方案 »

  1.   

    同志哥,你那不叫传参数,你已经在存储过程了,哈哈。
    如果你曾经有修改过某个创建完成的存储过程的经历,你应该知道,修改完的存储过程你必须用ALTER PROCEDURE XXX的方法进行重新编译。
    你传递的所谓参数如果更改了SQL语句的话,那么你必须重新编译存储过程,但其实这是在运行存储过程的过程中不可能实现的。
    请更改你的设计思路,记住你永远可以传参,却永远不可以动态修改存储过程。