- 私たちは例を提供する学部、クラスや学生に持っています。 表作成[DBO] .YuanXi ( 同上のint型の IDENTITY(1、1)NOT NULL、 - 増分から学校のID YuanXiName VARCHAR(50)はnull、 - 教員名 ) CREATE TABLE [DBO]に.Class ( 同上のint型の IDENTITY (1、1)NOT NULL、 - 増分からクラスID YuanXiIDのint型の ヌル、 - 学部のID ClassNameにVARCHAR(50)NULL - クラス名 ) CREATE TABLE [DBO] .Student ( IDint型の IDENTITY(1、1)NOT NULL、 - 増分から学生証 のClassIDの int型 はnull、 - クラスID StudentName VARCHAR(50)はnull、 - 生徒の名前 ) - このテーブルには、テーブルの絵ですが、私は一時的に、追加しますこれは、デモが続くことがあり CREATE TABLE [DBO] .PathImg ( IDのint型の IDENTITY(1、1)NOT NULL、 - から学校の増分ID テーブル名VARCHAR(50)nullは、 - これは、たとえば、私は情報工学をしたい、表示することですアカデミック価格の絵は、それがテーブルひなこXuanXiテーブルに加えてテーブルの変更だけでなく、情報工学のid学校、プラスに持っているでしょう TableNameId int型 はnull、 - これは上述のIDのいずれかの一つのテーブルである パスVARCHAR(50)NULL - 、ストレージクラス写真パス )
追加情報が変化するように、主キーは、(そのテーブルがIDをインクリメントして)変更されない変更するときの衝撃は、例えば、私が変更しても、他のテーブルに影響を与えないので変更は、比較的容易ですYuanXiテーブルアートの情報エンジニアリングスクールの学校やデザイン変更
名前が変更されますが、IDが変更されていない、と我々は変更する必要があること、はい、対応するクラスのテーブルクラスは何も変更する必要はないと言うかもしれないが、私たちは、クラスのリストを編集するためのインタフェースの[編集]ボタンをクリックすることができますが、再命名ラインにクラスIの。
IDが以来変わっていません。編集したくない場合は、削除行またはバッチを削除して、私のノートに道を削除するには、これらのクラスのクラスリストを見つける(https://www.cnblogs.com/zpy1993-09/p/11786057.html)それは詳細に行われています。
ここで私は別の方法を変更したい、上記の表には、該当するシナリオをいないようだ、と上記の表は関係ありません。今、私はテーブルのように死んでシンプルに変更し、変更のこのタイプではありません変更するには、特定のロジックで、道の修正の開発に私のお気に入りであると言いたいです。それともあなたの例を与えます!この例では、相互にWebプラットフォームやモバイルアプリです。
たとえば、タスクリスト、タスクステップテーブルおよびタスク・テンプレートのリストは、(実際には、タスクが属する追加、テンプレートテーブルをステップする必要があり、それが簡素化され、ここで合理的であるが、そのようタスク・テンプレートは、追加のステップは、ステップ・テンプレートを属します、 3つのテーブルを直接使用)
タスクリストには、私は、テーブル内のタスクを追加し、このタスクは、タスクを完了するために考慮することができる3つのステップで行われる必要があります。私はジョー・スミス、ジョー・スミスにこのタスクを割り当てられ、自分のタスクを確認する必要があり、電話APPを開きます。彼が関係しているデータを完了し、提出する3つの手順を入れて、テーブル内のステップに格納されます。テーブルは理解して見るために構築されました:
TaskStateIDは:Idはタスク状態番号が表現を表す:1:2未開始:処理3:4を保留中:完了します
TaseMoBanID:このタスク・テンプレートに属しているタスクを示しています
具体的なプロセス:ジョー・スミスは、タスクの一部を完了した場合、ジョー・スミスは、すべてのステップが行われて入れたときにジョー・スミス、TaskStateID = 1つのタスクに割り当てられたタスクが起動しない、TaskStateID = 2使命は、プロセスにあった、TaskStateID = 3タスクが属しています保留中。最後に、監査の開始を監査のタスクが、レビューは、タスクが完了したことTaskStateID = 4であります
例えば、私の仕事は、ジョー・スミスに割り当てられている場合、TaskStateIDは1である必要があり、タスクがまだ開始されていません、
私たちは、あなたが3つの手順を完了したいタスク、ジョー・スミス、それぞれがタスクを完了し、彼は一度提出します知っています。ステップテーブルのレコードを追加するには、言っ修正、我々はタスクテーブルTaskStateIDのステータスを置く必要があり、この時間は2処理に変更することをここに追加しないでください。データベースを変更する場合しかし、あなたはステップの数を完了するために最後に、見当がつかない、彼はあなただけの1つのステップを行うことができ、改訂なり、それが行われた可能性があります。これは、データベースを決定するためのロジックを使用して私たちを必要とします。
最初の提出は、データベース二つのパラメータに広がっていく場合、まず、決定現在のジョー・スミスは、ステップの数を完了し、ものである:テーブル名:表TableNameIDの名称:タスクID
私たちは、後に直接ストアドプロシージャを定義書きやすくするためにここにいます。
@tablenameのVARCHAR(30)
@TabaleNameID int型
1ステップでテーブルからレコードの数を探します
選択数(*)ここで、テーブル名= @テーブル名とTableNameID = @ TableNameIDステップから
2、ステップ数は完全にタスクを完了するために見つける必要があります。(ここでは、テーブル名は、テーブルの名前の上を通るように、この変更は、テーブルがデータベースに、一般的なされていることに注意しなければならない。データベースは、上記と同じ名前で文字列テーブルをチェックすることであり、そうではない、文字列の連結に必要性を)SQL文に
まず、タスク・テンプレートのIDを見つけます
EXEC(TableNameID @ 'ID =' + + @テーブル名+ 'FROM SELECT TaskMoBanID') - それは、SQL文の実装であることを翻訳フレーズのSQLコードは:ID = @ TableNameIDタスクからTaskMoBanIDを選択
タスク・テンプレートIDでタスクを完了するのに必要なステップ数を見つけるために:
同上ID =ステップを与えるためにどこtaskMoBanからMoBanStepCountを選択
3、現在の比較数値でタスクを完了するためのステップの数を完了するために、いくつかの手順を取ることを約束ジョー・スミスは(APPは、3つの手順が表示され、彼はちょうど編集する必要がありました際に開いた座席のステップ数が完了し、彼にはないことに注意してください手順を追加する機能、ステップ・テンプレート)が死んだに限定されてきました
ステップの現在のステップ数は、<このタスクの数を達成した場合
修飾されたタスクのステータスTaskStateID = 2(処理)
更新タスクが設定TaskMoBanID = 2ここで、ID = @ TableNameID
他
更新タスクが設定TaskMoBanID = 3どこID = @ TableNameID
Tidyの書き込みストアドプロシージャ
USE [ TESTDATA ] GO SET ANSI_NULLSをON GO SET QUOTED_IDENTIFIERをON GO ALTER PROCEDURE [ DBOに]。[ AlterDemo ] @tablename VARCHAR(30)- 文字列テーブル @TabaleNameIDの INT - テーブルID ASは、 - 2つの変数を定義しますタスクおよび総ステップ数に完了するためのステップの現在の数を受信する DECLARE @CurrentStepCount int型の DECLAREの @SumStepCountの int型 - レコードの現在の数を照会し、変数に代入 SET @CurrentStepCount=(SELECT COUNT(*)からの ステップは、WHEREテーブル名= @tablename と TableNameID = @TableNameID ) - 合計は、タスク番号を完了するための手順を照会し、変数に代入 - 緋文字を、この変数の定義は、文字の内側に配置する必要があります最初の2のように、外側に同様に、エラーがこの文を実行し、あれば、我々は注意を払う必要があります SET @SumStepCount = EXEC(「delcare @TaskMoBanID VARCHAR(30)SELECT @ TaskMoBanID TaskMoBanID = FROM 」 + @tablename + " WHERE同上= ' + @TableNameID + 'ID = @ TaskMoBanID taskMoBanからMoBanStepCountを選択する" ) 場合 @CurrentStepCount < @SumStepCount 更新タスクが設定 TaskMoBanID = 2 同上=が@TableNameID 他の更新タスクが設定 TaskMoBanID = 3 どこ イド= @TableNameIDを
: - EXEC上記の()文は、文字変換の一般的なSQL文が実行される
@TaskMoBanID VARCHAR(30)//タスクテンプレートIDを一時記憶変数をdelcare
SELECT @ TaskMoBanID = TaskMoBanIDタスクから Idは= @ TableNameID //は、 変数を使用してクエリを受け入れを結果
Idは= @ taskMoBanから選択MoBanStepCount TaskMoBanID // タスク・テンプレートの数のステップで再び、クエリの結果、クエリテンプレートテーブルに従って、
さて、ここでストップを変更し、実際には、変更せずにすべての修正時間後に主キー、および他の影響ライン上のエディタで直接プラットフォーム上で、一般的に単一のテーブルです。どちらのラインが、いくつかの簡単な方法を削除して、私はロジックモデルとその上で言ったように、それは正直にSQLコードを記述する必要があります。