1.insert Department R100,T102两条记录,
2.update Employee,
3.delete Department RE100,TE102两条记录.

解决方案 »

  1.   

    以免误会,本人加两个字:Department、Employee表格为主从关系表格。
    数据表格Department中有字段DepID(PK),DepName,Employee中有字段DepID、EmpID等。实现的功能是将Department中的记录中DepID字段为RE_100,TE_102的记录改为R100,T102,在Employee中的字段DepID中的记录也从RE_100,TE_102改为R100,T102,EmpID
    中的记录也从RE_100_01,TE_102_01改为R10001,T10201。
    本人需要在SQL SERVER中的查询分析器里实现,应该用什么SQL语句?最后该语句将嵌入我的ASP代码。所以请指点一下用什么SQL语句,最好用标准的SQL语句,如果用T-SQL语句,是否不能将其嵌入ASP的ADO代码中。
      

  2.   

    blackhawk_yps(原来是这样),你的语句可能还不行的??
      

  3.   

    以下SQL未經過測試:
    UPDATE Department SET DepID=CASE WHEN DepID='RE_100' THEN 'R100' WHEN DepID='TE_102' THEN 'T102' END 
    UPDATE Employee  SET DepID=CASE WHEN DepID='RE_100' THEN 'R100' WHEN DepID='TE_102' THEN 'T102' END ,
                     EmpID= CASE WHEN DepID='RE_100' AND EmpID='RE_100_01'  THEN 'R10001' 
                                                WHEN DepID='TE_102' AND EmpID='TE_102_01' THEN 'T10201' 
                                    END
      

  4.   

    UPDATE Department SET DepID=
    CASE WHEN DepID='RE_100' THEN 'R100' 
         WHEN DepID='TE_102' THEN 'T102' 
    END UPDATE Employee  SET DepID=
    CASE WHEN DepID='RE_100' THEN 'R100' 
         WHEN DepID='TE_102' THEN 'T102' 
    END
    UPDATE Employee  SET EmpID= 
    CASE WHEN EmpID='RE_100_01' THEN 'R10001' 
         WHEN EmpID='TE_102_01' THEN 'T10201' 
    ENDT-SQL语句完全可以嵌入ASP的ADO代码中。
      

  5.   

    上午有一阵登不上来。
    ----------------------------------
    update Employee set DepID=stuff(dep_id,2,1,''), 
           EmpID=replace(stuff(dep_id,2,1,''),'_','') 
    where DepID in ('RE_100','TE_102') 
    update Department set DepID=stuff(dep_id,2,1,'')
    where DepID in ('RE_100','TE_102')
      

  6.   

    为什么不行?你还没试怎么知道?DepID是外键,直接用update肯定不行
      

  7.   

    1、如果Employee中的DepID字段如果设置了外键,而且设置了ON UPDATE CASCADE ,那只要update Employee  
    set EmpID=replace(replace(EmpID,'E_',''),'_','')
    where DepID like '%E_%'update Department 
    set DepID=replace(DepID,'E_','')
    where DepID like '%E_%'2、如果Employee中的DepID字段如果设置了外键,但不是设置了ON UPDATE CASCADE ,用blackhawk_yps(原来是这样) 的方法。
    insert Department (depid,depname)
    select DepID=replace(DepID,'E_',''),depname
    from Department
    where DepID like '%E_%'update employee
    set EmpID=replace(replace(EmpID,'E_',''),'_',''),
        DepID=replace(DepID,'E_','')
    where DepID like '%E_%'delete Department
    where DepID like '%E_%'3、如果Employee中的DepID字段如果没有设置外键
    update employee
    set EmpID=replace(replace(EmpID,'E_',''),'_',''),
        DepID=replace(DepID,'E_','')
    where DepID like '%E_%'update Department 
    set DepID=replace(DepID,'E_','')
    where DepID like '%E_%'
      

  8.   

    呵呵,你是要改一类记录还是两条记录?
    如果是两条记录,把以上语句的where DepID like '%E_%'全都改为where DepID in ('RE_100','TE_102')
      

  9.   

    yang_:ON UPDATE CASCADE 怎么设置?他一般用在什么场合,他不能保证数据库完整性吧?多谢
      

  10.   

    blackhawk_yps(原来是这样) :
    ON UPDATE CASCADE 就是设置级联更新的,我拷贝一段帮助你看看。
    在创建外键的时候指明就可以了。有问题看帮助(主题:ALTER TABLE或者CREATE TABLE都有)
    级联引用完整性约束
    当用户试图删除或更新外键所指向的键时,级联引用完整性约束使您得以定义 Microsoft® SQL Server™ 2000 所采取的操作。CREATE TABLE 和 ALTER TABLE 语句的 REFERENCES 子句支持 ON DELETE 和 ON UPDATE 子句: [ ON DELETE { CASCADE | NO ACTION } ]
    [ ON UPDATE { CASCADE | NO ACTION } ] 
    如果没有指定 ON DELETE 或 ON UPDATE,则默认为 NO ACTION。NO ACTION 指定的行为与 SQL Server 的早期版本中发生的行为相同。ON DELETE NO ACTION指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则产生错误并回滚 DELETE。ON UPDATE NO ACTION指定如果试图更新某行中的键值,而该行含有由其它表的现有行中的外键所引用的键,则产生错误并回滚 UPDATE。CASCADE 允许在表间级联键值的删除或更新操作,这些表的外键关系可追溯到执行修改的表。不能为任何具有 timestamp 列的外键和主键指定 CASCADE。ON DELETE CASCADE指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。ON UPDATE CASCADE指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。级联引用操作的示例可以基于 Northwind 中 Products 表上的 FK_Products_Suppliers 约束。该约束建立了从 Products 表中的 SupplierID 列到 Suppliers 表中的 SupplierID 主键列的外键关系。如果为约束指定了 ON DELETE CASCADE,则删除 SupplierID = 1 的 Suppliers 表中的行时也将删除 SupplierID = 1 的 Products 表中的三行。如果为该约束指定了 ON UPDATE CASCADE,则更新 Suppliers 表中从 1 到 55 的 SupplierID 值也将更新 Products 表中 SupplierID 值当前等于 1 的三行的 SupplierID 值。不能为具有 INSTEAD OF 触发器的表指定级联操作。为表定义级联操作后,就不能向该表添加 INSTEAD OF 触发器。多个级联操作
    单独的 DELETE 或 UPDATE 语句可启动一系列级联引用操作。例如,假设有一个数据库包含三个表:TableA、TableB 和 TableC。针对 TableA 中的主键,用 ON DELETE CASCADE 定义 TableB 中的外键。针对 TableB 中的主键,用 ON DELETE CASCADE 定义 TableC 中的外键。如果 DELETE 语句删除 TableA 中的行,则该操作也将删除 TableB 中具有与 TableA 中所删除的主键匹配的任何外键中的所有行,然后删除 TableC 中具有与 TableB 中所删除的主键匹配的任何外键中的所有行。由单个 DELETE 或 UPDATE 触发的一系列级联引用操作必须构成不包含循环引用的树。在 DELETE 或 UPDATE 所产生的所有级联引用操作的列表中,每个表只能出现一次。级联引用操作树到任何给定表的路径必须只有一个。树的任何分支在遇到指定了 NO ACTION 或默认为 NO ACTION 的表时终止。触发器和级联引用操作
    级联引用操作按下列顺序激发 AFTER 触发器: 首先执行由原始 DELETE 或 UPDATE 直接导致的所有级联引用操作。
    当完成原始级联引用操作后,无论是否更新了任何行,都将激发原始表上的 AFTER 触发器。
    然后激发级联引用操作链中表上的 AFTER 触发器,但只有已更新或删除了表中的一行或多行时才激发。 
    如果任何原始级联引用操作集生成任何错误,则产生错误,不激发 AFTER 触发器,并且回滚 DELETE 或 UPDATE。AFTER 触发器可执行 DELETE 或 UPDATE 语句以启动其它级联引用操作链。每个辅助的引用操作链分开处理。这些辅助的引用操作链的行为与主链一样。在激发任何辅助触发器之前,完成所有的辅助引用操作。在每个独立的单元中,不定义执行级联引用操作和激发受影响的触发器的顺序。具有 INSTEAD OF 触发器的表不能同时具有指定级联操作的 REFERENCES 子句。但是,在作为级联操作目标的表上,AFTER 触发器可在其它表或视图上执行 INSERT、UPDATE 或 DELETE 语句,以激发在该表或视图上定义的 INSTEAD OF 触发器。级联引用约束目录信息
    下列目录信息是关于级联引用约束的。Transact-SQL OBJECTPROPERTY 函数支持 property 参数的下面两个新值。