0

簡単なデータベース管理ツールをC#でコーディングしようとしています。データベースに新しい行を挿入する関数をコーディング中ですが、問題が発生しました。どのID番号がまだ取得されていないかを検出できる必要があります。私はいくつかの調査を行いましたが、明確な答えは見つかりませんでした。

Example table:
ID    Name
---------------
1     John
2     Linda
4     Mark
5     Jessica

ID 3が空であることを自動的に検出し、そこに新しいエントリを配置する関数を追加するにはどうすればよいですか?

編集:私の本当の質問は; C#を介して新しい行を挿入する場合、自動インクリメントされる列を処理するにはどうすればよいですか?例は素晴らしいでしょう:)

4

4 に答える 4

3

私はこのような答えを出すのは好きではありません...しかし、私はとにかくこの機会に行きます。

しないでください

このテーブルのIDへの外部キーを持つ別のテーブルにさらにデータを格納するとどうなりますか?番号を再利用する場合は、参照整合性に関する問題が発生します。

あなたのフィールドはintだと思いますか?もしそうなら、自動増分はほとんどの目的のために十分以上を与えるはずです。挿入が簡単になり、整合性が維持されます。

編集:あなたはそれをする非常に正当な理由があるかもしれませんが、誰かがやって来て、それが良い考えだと思う人が後でこれを見る場合に備えて、私は要点を述べたいと思いました。

于 2013-01-31T16:27:06.110 に答える
1

SQL:

SELECT ID From TABLE

また

SELECT  t.ID
FROM    ( SELECT    number + 1 AS ID
          FROM      master.dbo.spt_values
          WHERE     Type = 'p'
                    AND number <= ( SELECT  MAX(ID) - 1
                                    FROM    @Table
                                  )
        ) t
        LEFT JOIN @Table ON t.ID = [@Table].ID
WHERE   [@Table].ID IS NULL

C#

DataTable dt = new DataTable();
//Populate Dt with SQL
var tableInts = dt.Rows.Cast<DataRow>().Select(row => row.Field<int>("ID")).ToList<int>();
var allInts = Enumerable.Range(1, tableInts.Max()).ToList();
var minInt = allInts.Except(tableInts).Min();
于 2013-01-31T16:34:33.130 に答える
0
SELECT      #temp.Id
FROM        #temp
LEFT JOIN   table1 ON #temp.Id = table1.Id
WHERE       table1.Id IS NULL

これを試して?

しかし、私の提案は、フィールドを自動インクリメントすることです。

その方法は、列のIDENTITYプロパティをtrueに設定し、それを主キーとしても設定します(nullではありません)。

挿入を処理するには、ストアドプロシージャのようなトリガーが必要になる場合がありますが、トリガーは、挿入、更新、削除の代わりに、または挿入/更新/削除の前/後に機能できます。

Googleがトリガーします。

于 2013-01-31T16:28:21.863 に答える
0

SQLでカウンターを実行する際の「ギャップ」を見つけるにはどうすればよいですか?

select
    MIN(ID)
from (
    select
        0 ID
    union all
    select
        [YourIdColumn]+1
    from
        [YourTable]
    where
        --Filter the rest of your key--
    ) foo
left join
    [YourTable]
    on [YourIdColumn]=ID
    and --Filter the rest of your key--
where
    [YourIdColumn] is null
于 2013-07-02T17:29:45.957 に答える