在sqlserver中建立一个存储过程,功能是动态建立一个表,并插入值,在sqlserver的查询分析器中执行正确通过没有问题。而在delphi中通过query调用该存储过程执行,确提示出错,提示说字段不能为空,这是什么原因呢??

解决方案 »

  1.   

    跟踪一下delphi执行存储过程的语句,copy出来在sql的query中执行一下看行不行,我觉得还是要检查一下你的存储过程
      

  2.   

    UP  gzllich(刚从泥坑里出来)
      

  3.   

    如果创建了主键, 而你插入的有null值,那当然要出错
      

  4.   

    我的存储过程如下:
    CREATE PROCEDURE  nn  AS
    declare   @sql varchar(255) 
    drop table goodzsale
    set @sql=''
    /*依据一个表里的值建立一个新表*/
    declare temptabl cursor for select comShortName from DataSaleArea
    open  temptabl 
    declare  @a varchar(50)
    fetch  temptabl  into  @a
    while @@fetch_status=0
    begin
        set @sql=@sql+@a+' int,'
        fetch next from temptabl into @a
    end
    close  temptabl set @sql=@sql+'mobtype varchar(255),mobname varchar(255)'
    exec('create table goodzsale('+@sql+')')
    open  temptabl //将另一个表里的值分组插入新表中
    fetch  temptabl  into  @a
    while @@fetch_status=0
    begin
    exec('insert  into goodzsale(mobtype,mobname,'+@a+') select mobtype,mobname,count(mobcode) from view_mobhouse1 where comShortName ='''+@a+'''   group by comShortName,mobtype,mobname')
    fetch next from temptabl into @a
    end
    close  temptabl
    GO
    如果在delphi里query连到odbc再执行该存储过程正确,但是如果通过datamodule里放的database连到数据库上就会提示出错。
      

  5.   

    出错提示是无法将null值插入表goodzsale中的列,该列不允许空值而且出错的列是新生成表的最后一列
      

  6.   

    你把这一部分语句拿出来放到Query中执行看看:
    insert  into goodzsale(mobtype,mobname,'+@a+') select mobtype,mobname,count(mobcode) from view_mobhouse1 where comShortName ='''+@a+'''   group by comShortName,mobtype,mobname')
    注意其中的变量全部换成实际的值。这也许有助于你查错。
      

  7.   

    没有问题呀,运行通过了,是不是datamodule的问题??