如果是要删除两张表中的呢?这两张表指定的字段一样。比如都保留  A  B  C这三个字段。删除其余的所有字段。sql

解决方案 »

  1.   

    给你一个脚本可以生成删除代码,下面是例子
    CREATE TABLE [dbo].[PP_CraftData](
    [CraftDataID] [int] IDENTITY(1,1) NOT NULL,
    [DataPlatID] [int] NULL,
    [CraftID] [int] NULL,
    [ProcessID] [int] NULL,
    [GoodsID] [int] NULL,
    [ProductID] [int] NULL,
    [ProductCode] [varchar](60) COLLATE Chinese_PRC_CI_AS NULL,
    [Machine] [int] NULL,
    [StandardValue] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
    [Re] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
    [OrderNO] [int] NULL,
    [Flag] [char](1) COLLATE Chinese_PRC_CI_AS NULL,
    [RelateID] [int] NULL,
    [ParentID] [int] NULL,
    [OpID] [int] NULL,
    [OpDate] [datetime] NULL,
    [CraftType] [int] NULL,
     CONSTRAINT [PK_PP_CraftData] PRIMARY KEY CLUSTERED 
    (
    [CraftDataID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]declare @s varchar(max) 
    set @s='update PP_CraftData set '
    select @s=@s+''+name+'=null,'
    from syscolumns
    where id=object_id('PP_CraftData') and name<>'指定字段'
    order by colid
    print left(@s,len(@s)-1)
    结果:
    /*
    update PP_CraftData set CraftDataID=null,DataPlatID=null,CraftID=null,ProcessID=null,GoodsID=null,ProductID=null,ProductCode=null,Machine=null,StandardValue=null,Re=null,OrderNO=null,Flag=null,RelateID=null,ParentID=null,OpID=null,OpDate=null,CraftType=null*/
      

  2.   

    if OBJECT_ID('tempdb..a') is not null drop table tempdb..a
    if OBJECT_ID('tempdb..b') is not null drop table tempdb..bselect 1 A,2 B,3 C, 4 D  into tempdb..a
    select 1 A,2 B,3 C, 4 D ,5 E ,6  F into tempdb..b 
    select * from tempdb..a
    select * from tempdb..bdeclare @sql varchar(max)
    set @sql = '' 
    select @sql = @sql + ' alter table tempdb..a drop column ['+b.name+']'   
      from tempdb..sysobjects a join tempdb..syscolumns b on b.id=a.id 
      where a.name = 'a' and a.xtype = 'U'
        and b.name not in ('A','B','C')
    print @sql
    exec(@sql)set @sql = '' 
    select @sql = @sql + ' alter table tempdb..b drop column ['+b.name+']'   
      from tempdb..sysobjects a join tempdb..syscolumns b on b.id=a.id 
      where a.name = 'b' and a.xtype = 'U'
        and b.name not in ('A','B','C')
    print @sql
    exec(@sql)select * from tempdb..a
    select * from tempdb..b
      

  3.   

    if OBJECT_ID('tempdb..a') is not null drop table tempdb..a
    if OBJECT_ID('tempdb..b') is not null drop table tempdb..bselect 1 A,2 B,3 C, 4 D  into tempdb..a
    select 1 A,2 B,3 C, 4 D ,5 E ,6  F into tempdb..b 
    select * from tempdb..a
    select * from tempdb..bdeclare @sql varchar(max)
    set @sql = '' 
    select @sql = @sql + ' alter table tempdb..a drop column ['+b.name+']'   
      from tempdb..sysobjects a join tempdb..syscolumns b on b.id=a.id 
      where a.name = 'a' and a.xtype = 'U'
        and b.name not in ('A','B','C')
    print @sql
    exec(@sql)set @sql = '' 
    select @sql = @sql + ' alter table tempdb..b drop column ['+b.name+']'   
      from tempdb..sysobjects a join tempdb..syscolumns b on b.id=a.id 
      where a.name = 'b' and a.xtype = 'U'
        and b.name not in ('A','B','C')
    print @sql
    exec(@sql)select * from tempdb..a
    select * from tempdb..b
      

  4.   

    SELECT
    tablename = a.NAME,
    colname = b.name,
    delsql = 'alter table test3 drop column '+ QUOTENAME(b.NAME)
    FROM sys.tables a
    INNER JOIN sys.columns b
    ON a.object_id = b.object_id
    WHERE a.name = 'test3'
    AND b.name NOT IN
    (
    'a',
    'b',
    'c'
    )    /*
    tablename colname delsql
    test3 bb alter table test3 drop column [bb]
    test3 cc alter table test3 drop column [cc]
    */
      

  5.   

    怎么都这么复杂。。删除多列不是可以这样吗ALTER TABLE 表名 DROP COLUMN 列名1,列名2 因为列太多了,只要保留少数几列就行了。只能像上面的这样解决吗。。
      

  6.   

    DECLARE @sql NVARCHAR(MAX)
    SET @sql = N'
    alter table test3 drop column 
    '+STUFF((
    SELECT  ','+QUOTENAME(b.NAME)
    FROM sys.tables a
    INNER JOIN sys.columns b
        ON a.object_id = b.object_id
    WHERE a.name = 'test3'
        AND b.name NOT IN
        (
            'a',
            'b',
            'c'
        )
    FOR XML PATH('')),1,1,'')
    EXEC(@sql)