Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách chèn dữ liệu từ một cột vào một bảng khác

Lý do bạn gặp lỗi này là do admin_id không phải là NULLABLE nghĩa là bạn phải admin_id cho mọi hàng. Khi bạn thực hiện INSERT bạn phải chèn rõ ràng admin_id vì nó không phải là IDENTITY cột tài sản.

Kết quả mong đợi của bạn cho thấy rằng bạn muốn thực hiện UPDATE , không phải INSERT . UPDATE sẽ UPDATE admin_id hiện có trong table_admin của bạn bảng thay vì chèn hàng mới. Một điều chưa rõ ràng là cách table_admin liên quan đến table_information . John được chỉ định như thế nào admin_id = 1 ?

Sau khi bạn xác định điều đó, đây là UPDATE

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

Nếu bạn không quan tâm admin_name nào lấy những gì admin_id , sau đó bạn có thể tạo khóa thay thế và cập nhật bảng của mình. Nó sẽ giống như thế này:

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

CHỈNH SỬA

Nếu bạn không có bất kỳ admin_name hiện được điền trong table_admin thì tôi khuyên bạn chỉ cần cắt ngắn bảng đó và chèn admin_name riêng biệt của bạn . Một lần nữa, tôi cũng sẽ tạo admin_id một tài sản nhận dạng

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

Tôi nên đánh dấu rằng trong hầu hết các lược đồ, admin_id có nghĩa là một cái gì đó. Nó sẽ là một PRIMARY KEY cho bảng này và được sử dụng để liên kết bảng này với các bảng khác trong cơ sở dữ liệu. Vì vậy, không biết admin_id nào chuyển đến admin_name có nghĩa là bạn có một mớ hỗn độn thực sự trong tay và chỉ định chúng một cách ngẫu nhiên nên phá vỡ các quy trình hạ nguồn ... nhưng điều đó có thể không đúng vì bạn đã không theo kịp nó từ đầu.

Tôi muốn hỏi tại sao? Điều này ám chỉ bạn có một ánh xạ của admin_name tới admin_id đã ... nhưng bạn chưa thể hiện điều đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách liệt kê tất cả các ngày giữa hai ngày

  2. Cần trợ giúp trong truy vấn động với Mệnh đề IN

  3. Quét ngược chỉ mục SQL Server:Hiểu, điều chỉnh

  4. Cách tạo bảng trong SQL Server

  5. Ví dụ về DATENAME () trong SQL Server