Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wstawić dane z jednej kolumny do innej tabeli

Przyczyną tego błędu jest to, że admin_id nie jest NULLABLE co oznacza, że ​​musisz mieć admin_id dla każdego rzędu. Kiedy wykonujesz INSERT musisz jawnie wstawić admin_id ponieważ nie jest to IDENTITY kolumna właściwości.

Oczekiwane wyniki wskazują, że chcesz wykonać UPDATE , a nie INSERT . UPDATE zrobi UPDATE admin_id obecnie w Twoim table_admin tabeli zamiast wstawiania nowych wierszy. Jedyną niejasną rzeczą jest to, jak table_admin odnosi się do table_information . W jaki sposób John otrzymuje przypisanie admin_id = 1 ?

Gdy to zdefiniujesz, oto UPDATE

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

Jeśli nie obchodzi Cię, który admin_name pobiera co admin_id , możesz utworzyć klucz zastępczy i zaktualizować swoją tabelę. Wyglądałoby to tak:

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

EDYTUJ

Jeśli nie masz żadnych admin_name obecnie wypełniane w table_admin sugeruję po prostu skrócić tę tabelę i wstawić odrębną admin_name . Znowu zrobiłbym też admin_id właściwość tożsamości

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

Powinienem podkreślić, że w większości schematów admin_id by coś znaczyło. Byłby to PRIMARY KEY dla tej tabeli i być używany do powiązania tej tabeli z innymi w bazie danych. Tak więc, nie wiedząc, który admin_id przechodzi do którego admin_name oznacza, że ​​masz bałagan na rękach i przydzielanie ich losowo powinien rozbić dalsze procesy ... ale może tak nie być, ponieważ nie nadążałeś za tym od początku.

Pytam dlaczego? Oznaczałoby to, że masz mapowanie admin_name do admin_id już... ale tego nie pokazałeś.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć wartość z procedury składowanej do c#

  2. MS SQL 2008 - pobierz wszystkie nazwy tabel i ich liczbę wierszy w bazie danych

  3. Logowanie nie powiodło się. Login pochodzi z niezaufanej domeny i nie może być używany z uwierzytelnianiem Windows

  4. jak znaleźć wersję i edycję instancji serwera sql za pośrednictwem rejestru?

  5. Zastąp Optymalizator zapytań dla połączeń T-SQL za pomocą FORCEPLAN