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查询结果集添加行号列:

1. 用SQL2005及以上版本 SELECT ROW_NUMBER()over(ORDER BY FID) as ID, FID, FANAME FROM PT_CRBC_AccidentReport --ID即为行号


2. SQL2000 可以使用临时表:
        SELECT IDENTITY(INT,1,1) ID, FANAME INTO #TEMP FROM PT_CRBC_AccidentReport
        SELECT * FROM #TEMP
        DROP TABLE #TEMP

13. 判断某个表中是否存在某个字段方法

1 if exists(select * from syscolumns where name='字段名' and id=object_id('表名'))
2 
3 print ''
4 
5 else 
6 
7 print '没有'

14. 判断是否存在某张表

1 if exists ( select * from sys.objects where name ='表名')
2 print '表存在'
3 else
4 print '表不存在'

优质内容筛选与推荐>>
1、JXL读取Excel(只支持xls版本)——(二)
2、Wireshark的HTTP请求包和响应包如何对应
3、Nodejs生态圈的TypeScript+React
4、6/20晚学习状态
5、程序输出print语句及'Hello World'


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn