with form1.ADOQuery2 do
    begin
      sql.Clear;
      sql.Add('execute sp_add_jobstep :job_name,:step_name,:subsystem,:command');
      parameters.ParamByName('job_name').Value:='001';
      parameters.ParamByName('step_name').Value:='备份';
      parameters.ParamByName('subsystem').Value:='TSQL';
      parameters.ParamByName('command').Value:='BACKUP DATABASE Pubs TO DISK=''e:\back\pubs.bak''';
      execsql;
    end;
我运行时老是提示,当前应用程序中使用了错误的值类型,subsystem,command应该怎样赋值?

解决方案 »

  1.   

    with ADOQuery1 do
    begin
    sql.Clear;
    parameters.Clear;
    sql.Add('execute sp_add_jobstep :job_name,:step_name,:subsystem,:command');
    parameters.ParamByName('job_name').Value:='001';
    parameters.ParamByName('step_name').Value:='备份';
    parameters.ParamByName('subsystem').Value:='TSQL';
    parameters.ParamByName('command').Value:='BACKUP DATABASE Pubs TO DISK=''e:\back\pubs.bak''';
    execsql;
    end;
    如果不采用参数的方式有问题吗?
      

  2.   

    execute sp_add_jobstep @job_name=:job_name,@step_name=:step_name, @ubsystem=:subsystem, @command=:command'
      

  3.   

    这跟参数形式应该没有太大关系吧
      with form1.ADOQuery2 do
        begin
          sql.Clear;
          sql.Add('execute sp_add_job :job_name,:enabled');
          parameters.ParamByName('job_name').Value:='001';
          parameters.ParamByName('enabled').Value:=1;
          execsql;
        end;
    这个代码都能运行,但将上面的步骤添加到作业中时就出错
      

  4.   

    在sp_add_job里subsystem,command是什么数据类型啊?
      

  5.   

    nvarchar类型的,没人能帮一下吗?
      

  6.   

    我调用的是SQL Server的系统存储过程,不是我自己写的,是为作业添加步骤的
      

  7.   

    sql.Add('execute sp_add_jobstep :@job_name,:@step_name,:@subsystem,:@command');
    parameters.ParamByName('@job_name').Value:='001';
    parameters.ParamByName('@step_name').Value:='备份';
    parameters.ParamByName('@subsystem').Value:='TSQL';
    parameters.ParamByName('@command').Value:='BACKUP DATABASE Pubs TO
      

  8.   

    为什么不把参数值直接写在后面呢?
    sql.add('exec sp_add_jobstep  '+quotedstr('001')+','+quotedstr('备份')+','+quotedstr('TSQL')+','+quotedstr('BACKUP DATABASE Pubs TO DISK=''e:\back\pubs.bak'''));
      

  9.   

    上面的我试了一下,还是不行啊,delphi里怎么为一个nvarchar类型的参数赋值?
      

  10.   

    还有,这个存储过程还有其他参数,并不是只有4个,有的可以用默认值,如果这样写
    sql.add('exec sp_add_jobstep  '+quotedstr('001')+','+quotedstr('备份')+','+quotedstr('TSQL')+','+quotedstr('BACKUP DATABASE Pubs TO DISK=''e:\back\pubs.bak'''));
    参数对应的位置就不对了