SQL SERVER 2008数据库常用命令详解1、数据库的创建与删除CREATE DATABASE db1; --创建数据库db1DROP DATABASE db1; --删除数据库db12、数据表的创建与删除CREATE TABLE t1( --创建数据表t1,t1包含两个字段col1 varchar(100),col2 int);DROP TABLE t1; --删除数据表t1创建两表之间的外键关联:CREATE TABLE t2( --创建主表t2_c1 char(8) PRIMARY KEY, -- 定义主键t2_c2 int);CREATE TABLE t3( --创建从表t3_c1 char(8),t3_c2 int,FOREIGN KEY(t3_c1) REFERENCES t2(t2_c1) -- 定义外键);DROP TABLE t3,t2; -- t3应先于t2被删除3、索引的创建与删除CREATE INDEX index1 ON t1(col1); -- 创建非聚集索引index1 DROP INDEX index1 ON t1; -- 删除非聚集索引index14、视图的创建与删除CREATE VIEW view1 -- 创建视图view1AS SELECT * FROM t1;DROP VIEW view1; -- 删除视图view15、超级用户的创建与删除CREATE LOGIN log1 -- 创建名为log1的登录WITH PASSWORD = '123456', -- 密码为123456DEFAULT_DATABASE = db1; -- 默认数据库为db1GOEXEC sp_addsrvrolemember ' log1', 'sysadmin'; -- 赋最高权限GO--------------------------------DROP LOGIN log1; -- 删除登录log16、数据库用户的创建、授权与删除CREATE LOGIN mylog WITH PASSWORD = '123456', -- 先创建一个登录DEFAULT_DATABASE = db1;GOUSE db1;GOCREATE USER user1 FOR LOGIN mylog; -- user1依赖于mylogGOGRANT CREATE TABLE,CREATE VIEW,CREATE PROCEDURE,ALTER ANY SCHEMA TO User1;-- 授权GO--------------------------------DROP USER user1; -- 删除用户user1DROP LOGIN mylog; -- 删除登录mylog7、数据库的备份与还原USE master;GOALTER DATABASE db1 SET RECOVERY SIMPLE; -- 切换到简单恢复模式下GOBACKUP DATABASE db1 -- 将数据库db1完整备份到文件db1_disk.bakTO DISK = 'D:\Backup\db1_disk.bak'WITH FORMAT;-----------------------------------------USE master;GOEXEC sp_addumpdevice 'disk', 'db1_simple', 'D:\Backup\db1_disk.bak'; GORESTORE DATABASE db1 -- 利用备份文件db1_disk.bak完整备份db1FROM db1_simple;8、数据库的分离与附加USE master;GOEXEC sp_detach_db 'db1', NULL, 'true'; -- 分离数据库-------------------------------------------利用分离得到的db1.mdf进行附加DECLARE @data_path nvarchar(256);SET @data_path= 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\';EXEC ('CREATE DATABASE db1ON (FILENAME = '''+ @data_path + 'db1.mdf'')FOR ATTACH');GO9、存储过程的创建、调用和删除CREATE PROCEDURE MyPro -- 定义带两个参数的存储过程 @min_avgrade numeric(3,1),@max_avgrade numeric(3,1)ASSELECT s_no,s_name,s_sex,s_avgrade,s_deptFROM studentWHERE s_avgrade>=@min_avgrade AND s_avgrade<=@max_avgrade; -----------------------------------------EXEC MyPro 50,88.8; -- 调用存储过程-----------------------------------------DROP PROCEDURE MyPro -- 删除存储过程10、触发器的创建、应用和删除CREATE TRIGGER MyTrigger ON t1 -- 创建触发器AFTER DELETEASBEGINPRINT '有人删除表t1中的数据!'END-------------------------------------------------------- 当执行DELETE语句时,该触发器被触发,如:DELETE FROM t1;------------------------------------------------------DROP TRIGGER MyTrigger; -- 删除触发器11、游标的创建、应用和删除DECLARE MyCursor CURSOR --创建游标STATICFOR SELECT col1 FROM t1;OPEN MyCursor;DECLARE @RowCount Integer, @i Integer, @col varchar(100);SET @i=0SET @RowCount = @@CURSOR_ROWSWHILE @i<@RowCountBEGINFETCH NEXT FROM MyCursor -- 将游标中的数据逐一输出INTO @col;PRINT @col;SET @i=@i+1ENDCLOSE MyCursor;DEALLOCATE MyCursor; -- 删除游标12、查看服务器上所有的数据库SELECT *FROM sys.databasesORDER BY name13、查看数据库中所有的数据表USE db1; -- 查询数据库db1中包含的所有数据表SELECT * FROM sys.tables;14、查看数据表的结构SELECT 字段名, 字段类型, a.max_length 字段长度FROM sys.all_columns as aJOIN sys.types as bON a.system_type_id = b.system_type_idWHERE object_id = object_id('t1');15、向数据表插入数据INSERT INTO t1 VALUES('庆祝建国六十周年!', 60); -- 向表t1插入数据INSERT INTO t1 VALUES('北京奥运!', 29);INSERT INTO t1 VALUES('上海世博会!', 51);16、更新表中的数据UPDATE t1SET col1 = '庆祝中华人民共和国建国六十周年!'WHERE col2=60;17、删除表中的数据DELETE FROM t1WHERE col2=29;18、降序、有条件查询SELECT col1, col2FROM t1WHERE col2 > 50ORDER BY col2 DESC19、等值连接查询SELECT t2.t2_c1, t2.t2_c2, t3.t3_c2FROM t2INNER JOIN t3ON (t2.t2_c1 = t3.t3_c1);20、左外连接查询SELECT t2.t2_c1, t2.t2_c2, t3.t3_c2 FROM t2LEFT JOIN t3ON(t2.t2_c1 = t3.t3_c1);21、右外连接查询SELECT t2.t2_c1, t2.t2_c2, t3.t3_c2 FROM t2RIGHT JOIN t3ON(t2.t2_c1 = t3.t3_c1);22、全外连接查询SELECT t2.t2_c1, t2.t2_c2, t3.t3_c2 FROM t2FULL JOIN t3ON(t2.t2_c1 = t3.t3_c1);23、IF语句DECLARE @n1 int, @n2 intSET @n1 = 2SET @n2 = 20IF @n1<@n2BEGINPRINT '@n1小于@n2';ENDELSE IF @n1=@n2BEGINPRINT '@n1等于@n2';ENDELSEBEGINPRINT '@n1大于@n2';ENDGO24、CASE语句SELECT 学号 = s_no, 姓名及爱好 = CASE s_noWHEN '20060201' THEN '李好,游泳' WHEN '20060202' THEN '王丫,登山'ELSE '没有这个人'ENDFROM student25、WHILE语句DECLARE @n int, @i int, @resulet int; -- 计算n的阶乘n!SET @n = 5;SET @i = 1;SET @resulet = 1;WHILE @i <= @nBEGINSET @resulet = @resulet * @i;SET @i = @i + 1;ENDPRINT @resulet26、字符串数据和数值型数据的转换DECLARE @f float, @s varchar(20); -- 数值型数据→字符串数据SET @f=3.14159;SET @s=CONVERT(varchar(20),@f);--------------------------------------------------DECLARE @f float, @s varchar(20); -- 字符串数据→数值型数据SET @s='1.73205';SET @f=CONVERT(float,@s);27、时间类型数据和字符串类型数据的转换DECLARE @dt datetime, @str varchar(30); -- 时间数据→字符串数据SET @dt=GETDATE();--SET @str=CONVERT(varchar(30), @dt, 114);SET @str=CONVERT(varchar(30), @dt, 111);PRINT @str--------------------------------------------------DECLARE @dt datetime, @str varchar(30); -- 字符串数据→时间数据SET @str = '2009/09/12';SET @dt=CONVERT(datetime, @str);PRINT @dt;28、获取服务器、数据库、应用程序、用户、登录等名称PRINT HOST_NAME(); -- 获取服务器名PRINT DB_NAME(); -- 获取数据库名PRINT APP_NAME(); -- 获取应用程序名PRINT USER_NAME(); -- 获取数据库用户名PRINT SUSER_SNAME(); -- 获取登录名。