今儿中途杀入,来学习也好,复习也好,重温SQL Server当中的Alter字句。
The ALTER TABLE command to change the table's structure and add or remove certain table properties, such as table constraints.
可以用Alter来添加一个column、改变一个column的数据类型、添加一个约束条件;也可以给column改名字,等等。
首先,使用这个语句,create一个table来玩玩儿。
CREATE TABLE Production.CategoriesTest
(
categoryid INT NOT NULL IDENTITY
);
然后,用ALTER语句给这个table添加两列:
ALTER TABLE Production.CategoriesTest ADD categoryname NVARCHAR(15) NOT NULL;
ALTER TABLE Production.categoriestest ADD description NVARCHAR(200) NOT NULL;
在这里,把INSERT与SELECT连起来用,给这个TABLE插入一些数据,这里要注意一下INSERT与SELECT连用的语法。
INSERT Production.CategoriesTest (categoryid, categoryname, description)
SELECT categoryid, categoryname, description
FROM Production.Categories;
当我直接运行上述的SQL语句时回出现错误:“当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'products' 中的标识列插入显式值。”
这里就需要使用这个语句把Production.CategoriesTest 的标识列开启:
SET IDENTITY_INSERT Production.CategoriesTest ON
然后在运行INSERT语句就没有ERROR了。
运行一个查询语句,看看数据已经成功INSERT了。
这里,把这个表给删除,顺便复习一些OBJECT_ID这个东东。
IF OBJECT_ID('Production.CategoriesTest','U') IS NOT NULL
DROP TABLE Production.CategoriesTest;
上面的参数'U'代表user defined table.搜索 SQL SERVER OBJECT_ID可以再微软的MSDN网站上查到详细内容。
http://msdn.microsoft.com/zh-cn/library/ms190324.aspx
ALTER--修改列的定义
在这里我们要把description这一列的字符长途增加到500,并改为允许为空。
ALTER TABLE [Production].[CategoriesTest]
ALTER COLUMN description NVARCHAR(500) NULL;
然后我们再用UPDATE子句把第8条数据的值改为NULL
UPDATE Production.CategoriesTest
SET description=NULL
WHERE categoryid=8;
可以看到,已经把value改为NULL了。
此时我们试图把description的定义改为不允许NULL,这回会成功吗?
ALTER TABLE Production.CategoriesTest
ALTER COLUMN description NVARCHAR(500) NOT NULL ;
可见,其结果失败了。
想一想,里面已经有NULL值了,再改为不允许为空,这样的话,表里面的数据就与表结构的定义不符合。
我们要把第8条数据的NULL值改为不为空的值的,然后才可以把表的定义改回不为空。