在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近由于项目需要要做一个小工具。 复制代码 代码如下: sp_renamedb 更改数据库的名称。 语法 sp_renamedb [ @dbname = ] ' old_name ' , [ @newname = ] ' new_name ' 参数 [ @dbname = ] ' old_name ' 是数据库的当前名称。old_name 为 sysname 类型,无默认值。 [ @newname = ] ' new_name ' 是数据库的新名称。new_name 必须遵循标识符规则。new_name 为 sysname 类型,无默认值。 返回代码值 0 (成功)或非零数字(失败) 权限 只有 sysadmin 和 dbcreator 固定服务器角色的成员才能执行 sp_renamedb。 示例 下例将数据库 accounting 改名为 financial。 EXEC sp_renamedb ' accounting ' , ' financial ' 二、更改表名或列名 复制代码 代码如下: sp_rename [ @objname = ] ' object_name ' , [ @newname = ] ' new_name ' [ , [ @objtype = ] ' object_type ' ] ///////////////////////////////////////////// A. 重命名表 下例将表 customers 重命名为 custs。 EXEC sp_rename ' customers ' , ' custs ' B. 重命名列 下例将表 customers 中的列 contact title 重命名为 title。 EXEC sp_rename ' customers.[contact title] ' , ' title ' , ' COLUMN ' 参考 复制表结构和表数据的SQL语句 列出参考内容来方便查看 1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 2.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2 即:让WHERE条件不成立. 方法二:(由tianshibao提供) CREATE TABLE 新表 LIKE 旧表 3.复制旧表的数据到新表(假设两个表结构一样) INSERT INTO 新表 SELECT * FROM 旧表 4.复制旧表的数据到新表(假设两个表结构不一样) INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表 想到这,发现好像还少了点什么,呃,procedure和constraint,好吧,那我也先删除再添加 先查出来 select name from sys.procedures select constraint_name, table_name from information_schema.table_constraints 再删除 drop procedure [dbo].[procedure_name] alter table tableName drop CONSTRAINT [PK_ |FK_ |UK_ |DF_ |CK_] 这里再补充一些东西,关于约束前缀,参考SQL约束前缀 方便查看,再列出来 --主键 constraint PK_字段 primary key(字段), --唯一约束 constraint UK_字段 unique key(字段), --默认约束 constrint DF_字段 default('默认值') for 字段, --检查约束 constraint CK_字段 check(约束。如:len(字段)>1), --主外键关系 constraint FK_主表_从表 foreign(外键字段) references 主表(主表主键字段) 然后再从脚本中读取相应脚本文件并执行(加句废话:要执行多行脚本文件,CommandText里加'\n'就好了)。 解决方案三:思来想去,为什么非要导入数据,直接改表结构就好了呀。于是读取表中字段 select column_name,data_type from information_schema.columns where table_name = 'tableName' 对于旧表中存在的字段 ALTER TABLE [tableName] ALTER COLUMN [columnName] [int] NOT NULL 对于旧表中不存在的字段 ALTER TABLE [tableName] ADD COLUMN [columnName] [int] NOT NULL 这样一来就不用导入数据就可以把旧库结构更新,其中除了运用一些ADO.NET方面的知识,还用到了正则表达式之类的来匹配脚本中相应的SQL命令。当然目前的方案还存在一些问题,这个工具还不够通用,对需要旧表多余的列并没有删除,还有容错性方面考虑得也不够周到。后期还会根据项目需要进一步改进的。 |
请发表评论