当前位置:数据库 > SQLServer >>

MSSQL中把所有表中的时间字段中的2006中替换成2008

用一条语句,把一个数据库的所有的表中的时间字段中的2006替换成2008.例如2006-11-28 3:10:00替换成2008-11-28 3:10:00
补充:是用语句更新整个数据库,而不是一个表一个表的更新
答案:使用函数DATEADD来为日期型数据增加增量,通过YEAR来判断年份
如下:
UPDATE [Table1]
SET [Field1] = DATEADD(YEAR,2,[Field1])
WHERE YEAR([Field1])=2006
--
如果要对整个数据库的所有表进行这种操作可以使用动态SQL
1 查找出全部表的表名与字段名,对于你现在的需要,过滤条件是字段类型为DateTime
2 将查找出来的结果放在临时表中(或用游标)循环取数拼出如上的SQL语句
3 使用Exec执行此SQL

具体实现代码如下:
--删除临时表
IF OBJECT_ID('tempdb..#tmp')>0 DROP TABLE #tmp

--查找全部表中字段类型为'datetime'的表名、字段名保存至临时表中
SELECT IDENTITY(int,1,1) id, o.name AS 表名, c.name AS 列名, t.name AS 类型
INTO #tmp
FROM syscolumns AS c INNER JOIN
      sysobjects AS o ON o.id = c.id AND OBJECTPROPERTY(o.id, N'IsUserTable') = 1 AND 
      o.name <> 'dtproperties' INNER JOIN
      systypes AS t ON t.xusertype = c.xusertype
WHERE t.name='datetime'
ORDER BY o.name

DECLARE @sql varchar(1000)
,@i int,@rowcount int

--取总记录数,对循环变量进行赋值
SELECT @rowcount=count(*) ,@i=1
FROM #tmp

--循环处理,生成更新语句
WHILE @i<=@rowcount
BEGIN
 SELECT @sql = 'UPDATE ['+ [表名] + '] SET [' + [列名] + '] = DATEADD(YEAR,2,['+[列名]+'])'
    + ' WHERE YEAR(['+[列名]+'])=2006'
 FROM #tmp
 WHERE id=@i

 --PRINT @sql
 EXEC(@sql)
 SET @i=@i+1
END

上一个:如何将MSSQL的数据导入到MYSQL中,请告知详细步骤
下一个:MSSQL数值型的值3位与13位的数字,所占存储空间差多少?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,