zoukankan      html  css  js  c++  java
  • MSSQL工作中常用的小技巧

    大概看了一下有接近二十天自己没有写博客了,一来是因为国庆之前公司工作总会比较繁杂一点,国庆自己也需要休息,二来是因为学习一些新的东西,公司写了一天SQL回家看了看以前的笔记,感觉还挺不错,贴出来供大家参考一下:

    1.同一服务器不同数据库之间数据的导入

    这个事属于数据导入方面的只是,如果经常操作数据库应该是会用到比较多的,业务场景为将FlyElephant中的DataSourceType中的数据导入到新数据库中的DataSoureType表中:

    set  identity_insert   DataSourceType  on
    insert  into   DataSourceType(OID , DataSourceName, OptimisticLockField, GCRecord)
    select  OID, DataSourceName, OptimisticLockField , GCRecord from   FlyElephant.dbo. DataSourceType  a  where 
    not  exists( select   DataSourceType. OID  from DataSourceType   where  a.OID= DataSourceType.OID )
    set  identity_insert DataSourceType  off
    

    2.不同服务器之间不同数据库之间数据的导入

    首先来看一个SQL语句

    select * from sysobjects where  name='sp_addlinkedserver'  

    首先使用这个存储过程建立一个链接:

      EXEC sp_addlinkedserver 'FlyElephantLink', '','SQLOLEDB' ,'192.168.0.9'
    

    建立连接之后创建登录信息,有两种登录方式,一种是window验证登录,一种是SQL认证的方式登录:

    EXEC sp_addlinkedsrvlogin 'FlyElephantLink' 
    EXEC sp_addlinkedsrvlogin 'FlyElephantLink', 'false',null,'sa' ,'123456'

     直接查询数据

    SELECT * FROM FlyElephantLink.TestDB.dbo.TestTable
    

     数据插入的请参考上一条,调用远程数据库的时候只需要加入你的连接的名称即可.

    3.数据库简单的连表更新

    业务场景:当某张表需要加一个字段,需要将另外一张表中的数据导入进来的时候这么操作过,具体请参考个人业务需求

     update   [User]   set [User].Age= People.Age  from   [User]   inner   join  People   on  [User].ID= People.UserID
    

    4.查询表中的字段

    这个用的比较少,当时自己操作的一张表中有一百多个字段,老板想问下表中有多少字段存储了数据,我懒得一个个数,搜索之后记录了一下:

    select name from syscolumns where id=( select id from sysobjects where xtype= 'u' and name= '表名' )
    

     其中sysobjects为系统表,主要储存系统中存在的表、触发器、存储过程等;syscolumns也为系统表,主要用于存储表的字段列;在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在sysobjects表中占一行。tempdb中只有临时对象才在该表中占一行。 

    5.删除有外键约束的表

    数据库中有的设计的存在问题,发现原先的表设计的是有关联,这个时候你去直接Drop是会报错的,比如说有两张表,一张是Person(ID,Name),一张是User(ID,PersonID,UserName),User表中存有Person表的数据,直接Drop表Person的时候是会提示,无法删除对象 'Person',因为该对象正由一个 FOREIGN KEY 约束引用。

    查出外建名:

    select
        a.name,a.object_id,OBJECT_NAME(a.parent_object_id) as referenceTableName
    from sys.foreign_keys as a
    join sys.objects as o on a.referenced_object_id=o.object_id
    where o.name='Person'

     删除外键(表是上面referenceTableName,外键就是上面的name字段)

    alter table dbo.[User] drop constraint FK_User_Person
    

      也没有什么太高深的东西,就是以前工作中遇到了,今天总结了一下,如果对你有所帮助,顺手给个推荐吧,么么哒~

  • 相关阅读:
    汉语-成语:老谋深算
    汉语-成语:深谋远虑
    汉语-词语:审题
    汉语-成语:未雨绸缪
    汉语-成语:精养蓄锐
    汉语-成语:厚积薄发
    汉语-成语:韬光养晦
    汉语-词语:忍耐
    菌类:羊肚菌
    养生-菌类:松露
  • 原文地址:https://www.cnblogs.com/xiaofeixiang/p/4014673.html
Copyright © 2011-2022 走看看