本问题涉及到多表级联的问题。现将关键代码贴出来,望大家能给予帮助,谢谢。问题在源码中。
//-------------------
 lAddtable:='create table ghs_table'+
                    '('+
                    '[ghs_name] varchar(40) PRIMARY KEY'+//供货商名称
                    ')';
 sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表 lAddtable:='create table vip_table'+
                    '('+
                    '[VIP_card] varchar(30) PRIMARY KEY'+//会员卡号
                    ')';
 sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表 lAddtable:='create table store_table'+
                    '('+
                    '[ID] numeric(20) PRIMARY KEY'+//分类
                    ')';
 sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表lAddtable:='create table sp_table'+
                    '('+
                    '[sp_bh] varchar(30) PRIMARY KEY,'+//商品编号,主键
                    '[sp_ghs] varchar(40) REFERENCES ghs_table(ghs_name) ON UPDATE CASCADE,'+
                    '[NodeKey] numeric(20) REFERENCES store_table(ID) ON UPDATE CASCADE'+
                    ')';
sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表lAddtable:='create table ls_table'+
                    '('+
{问题:就是下面这一行为什么不能级联到sp_table表的sp_bh字段,其他的都可以}
                    '[ls_bh] varchar(30) REFERENCES sp_table(sp_bh) ON UPDATE CASCADE,'+ //商品编号
             '[ls_HuiYuanCard] varchar(30) REFERENCES vip_table(VIP_card) ON UPDATE CASCADE,'+//会员卡号:
                    '[ls_ghs] varchar(40) REFERENCES ghs_table(ghs_name) ON UPDATE CASCADE,'+//商品的供货商
                    '[NodeKey] numeric(20) REFERENCES store_table(ID) ON UPDATE CASCADE'+//子类的节点KEY值
                    ')';
 sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表在mssql2000企业管理器测试返回以下错误信息:
'sp_table' 表成功保存
'ls_table' 表
- 不能创建关系 'FK__ls_table__ls_bh__09DE7BCC'。  
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]将 FOREIGN KEY 约束 'FK__ls_table__ls_bh__09DE7BCC' 引入表 'ls_table' 中将导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。请参阅前面的错误信息。
//-------------------

解决方案 »

  1.   

    上面的代码显示有点乱,重新贴一下,不好意思。
    //-------------------
     lAddtable:='create table ghs_table'+
     '('+
     '[ghs_name] varchar(40) PRIMARY KEY'+//供货商名称
     ')';
     sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表 lAddtable:='create table vip_table'+
    '('+
    '[VIP_card] varchar(30) PRIMARY KEY'+//会员卡号
    ')';
     sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表 lAddtable:='create table store_table'+
    '('+
    '[ID] numeric(20) PRIMARY KEY'+//分类
    ')';
     sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表lAddtable:='create table sp_table'+
    '('+
    '[sp_bh] varchar(30) PRIMARY KEY,'+//商品编号,主键
    '[sp_ghs] varchar(40) REFERENCES ghs_table(ghs_name) ON UPDATE CASCADE,'+
    '[NodeKey] numeric(20) REFERENCES store_table(ID) ON UPDATE CASCADE'+
    ')';
    sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表lAddtable:='create table ls_table'+
    '('+
    {问题:就是下面这一行为什么不能级联到sp_table表的sp_bh字段,其他的都可以}
    '[ls_bh] varchar(30) REFERENCES sp_table(sp_bh) ON UPDATE CASCADE,'+ {这里级联不了}
    '[ls_HuiYuanCard] varchar(30) REFERENCES vip_table(VIP_card) ON UPDATE CASCADE,'+//会员卡号:
    '[ls_ghs] varchar(40) REFERENCES ghs_table(ghs_name) ON UPDATE CASCADE,'+//商品的供货商
    '[NodeKey] numeric(20) REFERENCES store_table(ID) ON UPDATE CASCADE'+//子类的节点KEY值
    ')';
     sqlexec(SVRdm.sCreadata,lAddtable,0);//创建表
    //-------------------
      

  2.   

    编译是通过的。没有错误,就是在创建数据表时,不能创建级联关系。其实不是这两表的级联关系不能搞定:
    lAddtable:='create table sp_table'+
    '('+
    '[sp_bh] varchar(30) PRIMARY KEY,'+//商品编号,主键
    '[sp_ghs] varchar(40) REFERENCES ghs_table(ghs_name) ON UPDATE CASCADE,'+
    '[NodeKey] numeric(20) REFERENCES store_table(ID) ON UPDATE CASCADE'+
    ')';
    lAddtable:='create table ls_table'+
    '('+
    {问题:就是下面这一行为什么不能级联到sp_table表的sp_bh字段,其他的都可以}
    '[ls_bh] varchar(30) REFERENCES sp_table(sp_bh) ON UPDATE CASCADE,'+ {这里级联不了}
    '[ls_HuiYuanCard] varchar(30) REFERENCES vip_table(VIP_card) ON UPDATE CASCADE,'+//会员卡号:
    '[ls_ghs] varchar(40) REFERENCES ghs_table(ghs_name) ON UPDATE CASCADE,'+//商品的供货商
    '[NodeKey] numeric(20) REFERENCES store_table(ID) ON UPDATE CASCADE'+//子类的节点KEY值
    ')';望能帮助。谢谢