Sql-Server 常识 (更新中……)
笔者在开发过程中遇到的一些比较容易忘的,或者不太确定的SQL方面的问题做以下总结,不喜勿喷:
SQL-Server常识记录 1. 重命名数据:SP_RENAMEDB 'oldDBName','newDBName' GO --如果执行不成功的话,重新启动一下服务就可了 2. 查看当前数据库信息:SELECT * FROM DBO.SYSFILES --查看当前数据库的信息 3. 备份数据库:BACKUP DATABASE 数据库名字 TO DISK='备份保存路径' --例:BACKUP DATABASE localDB TO DISK='E:/LOCALDB.BAK' 注意此句后面不要加GO 4. 还原数据库: USE master RESTORE DATABASE 数据库名字 FROM DISK='备份所在的路径' --WITH REPLACE 如果提示日志问题,如果日志文件需要覆盖用此语句,如果需要日志文件请备份一下日志文件,然后再还原 GO 5. 本地跨数据库间的访问: 数据库名.DBO.表名 --例:TestDB.DBO.PT_CRBC_AccidentCasualty 6. 根据现在表创建新表:SELECT * INTO 新表名 FROM 原表名 --例:SELECT * INTO PT_CRBC_AccidentCasualty FROM TestDB.DBO.PT_CRBC_AccidentCasualty -- 此种方法只会复制表结构和里面的数据,约束,关系,索引都不会被复制 7. 添加主键: ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY(设置为主键的字段)[也可以设置组合主键PRIMARY KEY(COL1,COL2)] GO 8. 添加外键: ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES PT_CRBC_AccidentReport(引用表字段名) --删除主表时 ON DELETE{UPDATE} [CASCADE, SET NULL 置空, NO ACTION 无动作] GO 9. 删除约束: ALTER TABLE 表名 DROP CONSTRAINT 约束名
10. SQL查询关键字 UNION, UNION ALL, INTERSECT, MINUS UNION 不包括重复行,按查询字段自行排序,查询效率相对较低 UNION ALL 包括重复行,不自动排序,查询效率相对较高 INTERSECT 取两个结果集的交集,不包括重复行,默认规则排序 MINUS 取两个结果集的差集,不包括重复行,默认规则排序 (注:好像是Sql-Server不支持该关键字,Oracle里支持) EXCEPT 与 Minus 作用一样,应用到SQL-SERVER中 11.判断临时表是否存在 创建的临时表都存放在TEMPDB数据库中的SYSOBJECTS表里面,看了网上好多判断临时表是否存在的方法都解释的不是很清楚,这里澄清一下: 方法一: USE TEMPDB GO IF OBJECT_ID('#TEMP_A') IS NOT NULL PRINT 'YES' ELSE PRINT 'NO' 方法二: USE TEMPDB GO IF OBJECT_ID(N'#TEMP_A', N'U') IS NOT NULL PRINT 'YES' ELSE PRINT 'NO' 方法三: USE TEMPDB GO IF EXISTS (SELECT * FROM dbo.SysObjects WHERE ID = object_id(N'#TEMP_A') AND OBJECTPROPERTY(ID, 'IsTable') = 1) PRINT '存在' ELSE PRINT'不存在'
12. SQL查询结果集添加行号列: