客户需求:修改一张表的结构,并保留里面的数据。
解决方案:
1. 修改表名
2. 用原表名创建一个新的表
3. 用脚本把原表数据迁移到新表中
4. 删除原表
具体实现:
1. 修改表名:把表Customer重命名为Customer_REN EXEC sp_rename 'Customer','Customer_REN'
执行完后会有如下警告:Caution: Changing any part of an object name could break scripts and stored procedures.
如果现有查询、视图、用户定义函数、存储过程引用该表,则更改表名将使这些对象无效。当然我们后来会添加一个新的Customer表,但如果原表中的字段有删除或更改,一样会影响到视图、用户定义函数、存储过程,所以要注意检查。
更改表后最好删除外键,因为后面添加新的Customer表后添加外键约束时,外键名称可能会冲突。
查询外键:以下SQL语句就可以查询出Customer_REN表下的所有外键名称。
SELECT name from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id WHERE f.parent_object_id=object_id('Customer_REN')
删除外键:ALTER TABLE Customer_REN DROP CONSTRAINT 外键名称2. 用原表名创建一个新的表
在SQL Server Manager Studio中设计好一张表后,右键表名 > Script Table as > CREATE To > New Query Editor Window就可以把创建该表的脚本生成出来,注意检查生成的脚本,里面包含了数据库名称,如果你只是向客户提供脚本去他的数据库上运行,你们的数据库名可能会不一样,这样就需要把脚本里面的数据库名删除。3. 用脚本把原表中的数据导入到新表中
INSERT INTO Customer(Field1,Field2,...)
SELECT Field1,Field2,....
FROM Customer_REN
如果新表中添加了新的外键约束,迁移数据往往会碰到脏数据导致数据迁移失败,下面简单介绍一下如何删除脏数据(dirty data)。
这里的脏数据是指你需要导入的数据在外键关联的另一张表中没有对应的数据,那么你这条数据就是脏数据,是不允许被插入进去的,需要删除。
首先查询出脏数据:
SELECT *
FROM Customer AS c
LEFT JOIN Person AS p
ON c.PersonGuid = p.PersonGuid
WHERE p.PersonGuid IS NULL
这样就可以查询出Customer中的脏数据了,接下来就是删除脏数据,删除脏数据分两种情况:
如果Customer中的PersonGuid是个非空字段,就将SELECT * 替换成 DELETE c;
如果Customer中的PersonGuid是个可空字段,则将其置为空,将SELECT * 替换成 UPDATE c SET c.PersonGuid = null 4. 删除原表
DROP TABLE Customer_REN
sqlserver 如何更改表架构 sql server怎么修改表
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
sqlserver 更改架构 sqlserver 修改表结构
增加字段,删除字段,增加约束,删除约束,修改缺省值,修改字段数据类型,重命名字段,重命名表。所有这些动作都是用 ALTER TABLE 命令执行的。
sqlserver 更改架构 字段 重命名 数据类型 -
sql server 更改表结构 sql server 2008修改表结构
1、修改表结构遇到2、点击取消3、打开【工具】—【选项】4、找到【Desiginers】标签,在右边找到“阻止保存要求重现创建表的更改”,取消勾选。
sql server 更改表结构 SQL Server2008修改表结构 创建表 表结构