当前位置: 爱符号 - 所有分类 - 数据库 - sql server - 突发奇想,原来SQL语句可以这样?
突发奇想,原来SQL语句可以这样? TuFaQiXiang,YuanLaiSQLYuJuKeYiZheYang?
符号空间 发表于:2013-12-23 22:43:05 阅读(541)
关键词:SQL SQL 架构 架构 ALTER ALTER CREATE CREATE DROP DROP 修改列 修改列
摘要:用SQL语句直接修改列,以及SQL的架构操作解析。

以前遇到要将一个表的列修改为其它类型,比如int改成bigint,或者是修改 null 或  not null.

通常的做法,可能会是这样的:

1.用编辑器,这个方便是方便,不过你要是查看一下它生成的SQL,就知道了,它是新建一个表,然后把数据插入过去等复杂的数据。不适用于已经有很多数据的表。


2.用SQL语句,先将列移除,再加一个列上去,当然为了防止数据丢失,可能会有一个临时表把这个数据记录一下,然后UPDATE回去,这种同样不是很好


今天发现这样也可以


alter table [ThreadReply] alter column [QuoteId] bigint NULL



所以对于SQL其实一点都不神秘的,很简单的。


首先需要知道自己要做什么?

1.架构操作:表的结构、存储过程、函数、作业(计划任务)、视图、索引等

2.数据操作:插入、更新、删除、查询


那么再来分析一下吧。

1.架构操作,经常会看到CREATE ALTER DROP

  其实这就是对应的 创建、修改、移除

  所以你一定要知道自己做什么

2.数据操作

  其实这个相对简单得多,insert update delete select,都知道的。


那么现在举例:

1.创建一个函数

  分析:

     A.这是架构操作,并且是创建,CREATE 开头

     B.这是函数,FUNCTION跟着

     C.剩下是名字和函数的格式

   结果:

CREATE FUNCTION [dbo].[xxxxx](@p1 int) returns int AS BEGIN return 0 END


2.创建一个触发器

  分析:

     A.架构创建用CREATE

     B.触发器用:TRIGGER

3.移除一张表

  分析:

     A.架构操作中,移除用 DROP

     B.表用TABLE

  结果:

     DROP TABLE [xxxx]



所以现在需求,修改一个表中的某个列的数据类型为bigint.

  1.这是架构的修改,用ALTER

  2.修改的是表:TABLE

  3.这是对列修改操作,继续用ALTER,跟上 column

  4.跟上列的新定义

所以结果是:


ALTER TABLE [table1] ALTER COLUMN [Age] bigint NOT NULL



这条命令,以前有很多人这样尝试过:

ALTER TABLE [table1] modify [Age] bigint NOT NULL



其实现在看看,就知道这是对SQL的基本操作没有掌握好。在架构操作中没有modify这个东东的





声明:以上内容仅代表作者观点,不代表爱符号赞成此内容或立场