本帖最后由 bean_sql 于 2010-09-03 11:39:15 编辑

解决方案 »

  1.   

    http://technet.microsoft.com/zh-cn/library/ms177523.aspxWITH <common_table_expression>    指定在 UPDATE 语句作用域内定义的临时命名结果集或视图,也称为公用表表达式 (CTE)。CTE 结果集派生自简单查询并由 UPDATE 语句引用。有关详细信息,请参阅 WITH common_table_expression (Transact-SQL)。
      

  2.   

    我想要的效果是 先Delete ,把a表里的数据清除,然后 把 CTE 里面的数据插入到 a表里· 
    请问有什么好的方法没? 
    能不能用update语句实现 ·?
      

  3.   

    --try...
    declare @t table
    (
    name varchar(50)
    )
    ;with cte(t) as(
    select substring(name,0,charindex(',',name)) from a
     union all 
    select substring(name,charindex(',',name)+1,len(name)) from a
    )
    insert into @t
    select * from cte where t<>''update ... from a,@t where ...go 
      

  4.   

    IF OBJECT_ID('A') IS NOT NULL
      DROP TABLE A
    GOCREATE TABLE A
    (
    ID INT,
    NAME VARCHAR(50)
    )
    GO
    INSERT INTO A
    SELECT 1,'张三,李四'
    UNION ALL
    SELECT 2,'王五'
    UNION ALL
    SELECT 3,'马六,朱七'
    GO
    ;with cte(t) as(
    select substring(name,0,charindex(',',name)) from a
     union all 
    select substring(name,charindex(',',name)+1,len(name)) from a
    )
    insert into A
    select * from cte where t<>''
      

  5.   

    6楼的代码最后insert那里少了列名;with cte(t) as(
    select substring(name,0,charindex(',',name)) from a
     union all 
    select substring(name,charindex(',',name)+1,len(name)) from a
    )
    insert into A([name])
    select * from cte where t<>''
    这就正确了