MSSQL中把所有表中的时间字段中的2006中替换成2008
用一条语句,把一个数据库的所有的表中的时间字段中的2006替换成2008.例如2006-11-28 3:10:00替换成2008-11-28 3:10:00
补充:是用语句更新整个数据库,而不是一个表一个表的更新
用一条语句,把一个数据库的所有的表中的时间字段中的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位的数字,所占存储空间差多少?