一个表A有30个字段
假设将30个字段都该为同一个值,sql语句是什么呢

解决方案 »

  1.   

    动态sql
      

  2.   


    declare @a varchar(20),@sql varchar(8000)
    select @a='a',@sql=''
    select @sql='update Table_name set '+stuff((select ','+cast(column_name as varchar)+'='''+@a+'''' 
    as [text()]
    from information_schema.columns
    where table_name='Table_name'
    for xml path('')),1,1,'')
    exec (@sql)
      

  3.   


    GO
    /*
     存储过程:up_Update
     作用:将指定表内满足条件的行所有字段值更改为统一数据
     必选参数:tableName,newValue
     可选参数:where 
     作者Email:[email protected]
    */
    ALTER PROC up_Update
    (
    @tableName VARCHAR(100),--要修改的表名
    @newValue VARCHAR(100),--要修改为的新字段
    @where VARCHAR(200)=''--条件
    )
    AS
    BEGIN
    DECLARE @SQL VARCHAR(8000)
    SET @SQL=''
    SELECT @SQL=@SQL+[name]+'='''+@newValue+''',' FROM [syscolumns] where object_name(id)=@tableName
    SET @SQL=LEFT(@SQL,LEN(@SQL)-1)
    IF @where!=''
     SET @where=' WHERE '+@where
    EXEC('UPDATE '+@tableName+' SET '+@SQL+@where)
    END
    GO使用示例--建立测试用表
    IF OBJECT_ID('TESTB') IS NOT NULL
    DROP TABLE TESTB
    CREATE TABLE TESTB(A int,B INT,C VARCHAR(5))
    GO
    --插入一些数据
    INSERT INTO TESTB
    SELECT '0','0','0' UNION ALL
    SELECT '1','11','111' UNION ALL
    SELECT '2','22','222' UNION ALL
    SELECT '3','33','333' UNION ALL
    SELECT '4','44','444'
    GO
    --开始测试
    SELECT * from TESTB--查看原表内数据
    exec up_update 'testb','10','[a]=''4'''--将字段a为4的行所有字段改为10
    SELECT * from TESTB--查看改后结果
    exec up_update 'testb','10'--将表内所有行的所有字段改为10
    SELECT * from TESTB--查看改后结果
    DROP TABLE TESTB--删除测试用表
    GO
      

  4.   


    /*
    (所影响的行数为 5 行)A           B           C     
    ----------- ----------- ----- 
    0           0           0
    1           11          111
    2           22          222
    3           33          333
    4           44          444(所影响的行数为 5 行)
    (所影响的行数为 1 行)A           B           C     
    ----------- ----------- ----- 
    0           0           0
    1           11          111
    2           22          222
    3           33          333
    10          10          10(所影响的行数为 5 行)
    (所影响的行数为 5 行)A           B           C     
    ----------- ----------- ----- 
    10          10          10
    10          10          10
    10          10          10
    10          10          10
    10          10          10(所影响的行数为 5 行)
    */
      

  5.   

    哦 不好意思 错了一点点 
    建存储过程用create proc 
    我的是alter proc 成了修改了 
    将alter 改为create即可