问题描述
使用SQL Server 2012 附加一个数据库之后,想批修改数据中的时间,把时间日期提前,因为有很多表中有时间字段,在一个个表找,用sql更新,过于枯燥。想找一个一次性把所有表时时间都换成一样的方式。所以想到导出成sql脚本,然后用正则表达式查找替换,再重新建库。(当然情况是表比较多,但每个表中的数据量并不太多)
过程
先是参考SQLserver 2008将数据导出到Sql脚本文件的方法
发现只导出了表结构,未导出数据。
再找到了这篇SQL Server 2012 将数据导出为脚本详细图解 才搞定。
评价几句
- 没有记住上次向导的配置,每次导都要再配置一次,不方便。
- 高级配置里的选项那多么,却只分配那么小的框,要上下移,都做成向导页面了,就放一个高级配置的向导页就OK了嘛。
- 默认配置不合理。
新问题
数据是导出来了。
但发现插入时间的语句是这样的INSERT [dbo].[test] ([dt]) VALUES (CAST(0x0000A44E00000000 AS DateTime))
。
那CAST
后面的长串16进制是什么鬼。
碰见反常的东西,是要好奇查查。
MSDN 里 CAST 和 CONVERT (Transact-SQL),按图索冀 表达式(Transact-SQL) 然后就呵呵,断了。
- 查msdn时,总有这样的感觉,A页面说,详细请见B页面,然后B页面就是与A页面没太大联系的说明。
- 为什么要设计成这样,非要再转一次才能看到真的时间?
继续摸
如果时间紧,就不用在这里再探索那16个字符与时间的对应关系了。建个临时表,再导出需要调整的时间,再用导出的那个16进制数,替换那所有的数据就可以了。重放攻击的原理?
我想了解那个与时间的对应关系,先g