sql >> データベース >  >> RDS >> Sqlserver

ある列のデータを別のテーブルに挿入する方法

    このエラーが発生する理由は、admin_id が原因です。 NULLABLE ではありません つまり、しなければならない admin_id を持っている 行ごとに。 INSERT を実行すると admin_id を明示的に挿入する必要があります IDENTITY ではないため プロパティ列。

    期待される結果は、UPDATE を実行する必要があることを示しています 、INSERT ではありません . UPDATE UPDATE でしょうか admin_id 現在 table_admin にあります 新しい行を挿入する代わりにテーブル。 1 つはっきりしていないのは、table_admin がどのように table_information に関連 .ジョンに admin_id = 1 を割り当てる方法 ?

    それを定義したら、ここに UPDATE があります

    update t 
    set t.admin_name = i.admin_name
    from table_admin t
    inner join table_information i on i.someColumn = t.someColumn
      

    admin_name を気にしない場合 admin_id を取得します 、その後、代理キーを作成してテーブルを更新できます。次のようになります:

    select distinct 
        admin_name
        ,admin_id = row_number() over (order by (select null))
    into #tempInformation
    from table_information
    
    --this is going to show the admin_id that will be updated in the table_admin table
    select * from #tempInformation
    
    update t 
    set t.admin_name = i.admin_name
    from table_admin t
    inner join #tempInformation i on i.admin_id = t.admin_id
      

    編集

    何も持っていない場合 admin_name 現在 table_admin に入力されています 次に、そのテーブルを切り捨てて、別の admin_name を挿入することをお勧めします .繰り返しますが、admin_id も作成します。 ID プロパティ

    truncate table table_admin
    
    insert into table_admin (admin_id, admin_name)
       select distinct 
            admin_id = row_number() over (order by (select null))
            ,admin_name
      

    ほとんどのスキーマで、admin_id 何かを意味するでしょう。 PRIMARY KEY になります。 このテーブルに対して、このテーブルをデータベース内の他のテーブルと関連付けるために使用されます。したがって、どの admin_id かわからない どの admin_name に行きますか 手の中が本当に混乱していて、それらを無作為に割り当てることを意味します すべき 下流のプロセスを中断します...しかし、最初から維持していないため、そうではない場合があります。

    理由は?これは、 admin_name のマッピングがあることを暗示しています admin_id へ すでに... しかし、あなたはそれを示していません。




    1. Mysql-複数の列インデックスのシーケンス

    2. PHP/MySQLのようなボタン

    3. PostgreSQLクロス集計クエリ

    4. (sqlまたはpostgresqlで)任意の行に隣接する行を選択するにはどうすればよいですか?