MSSQLの仕事の中でよく使う小さい技巧

3021 ワード

大体20日近く自分がブログを书いていないことを见て、1つは国庆节の前に会社の仕事がいつも比较的に繁雑なためで、国庆节自分も休みが必要で、2つはいくつかの新しいものを学ぶためで、会社は1日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認証ログインの2つのログイン方法があります.
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.クエリー・テーブルのフィールド
この使用は比較的に少なくて、その時自分で操作した1枚の表の中に100余りのフィールドがあって、ボスは次の表の中でどれだけのフィールドがデータを保存したかを聞きたいと思って、私は1つの数がおっくうで、検索して記録しました:
select name from syscolumns where id=( select id from sysobjects where xtype= 'u' and name= '  ' )

そのうちsysobjectsはシステムテーブルであり、主にシステムに存在するテーブル、トリガ、ストレージプロセスなどを格納する.Syscolumnsはシステムテーブルでもあり、主にテーブルのフィールド列を格納するために使用されます.データベース内に作成された各オブジェクト(制約、デフォルト、ログ、ルール、ストレージ・プロシージャなど)はsysobjectsテーブルに1行ずつ表示されます.tempdbでは、テーブルに1行を占めるのは一時オブジェクトのみです. 
5.外部キー制約のあるテーブルの削除
データベースにあるデザインに問題があり、元のテーブルのデザインに関連があることに気づきました.このとき、直接Dropに行くと間違いが報告されます.例えば、2枚のテーブルがあり、1枚はPerson(ID,Name)、1枚はUser(ID,PersonID,UserName)、UserテーブルにPersonテーブルのデータが保存されています.直接DropテーブルPersonの場合はヒントになり、対象の「Person」を削除できません.このオブジェクトはFOREGN 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'

外部キーの削除(表は上のreferenceTable Name、外部キーは上のnameフィールド)
alter table dbo.[User] drop constraint FK_User_Person

あまり深いものもありません.以前の仕事で出会ったことです.今日はまとめてみました.もしあなたに役に立つなら、ついでにお勧めしましょう.