2016-06-04 3 views
2

Я использую SQL Server 2008. Я пытаюсь вставить данные в таблицу dv_user_akun со значением, которое я выбрал из другой таблицы. Взгляни, пожалуйста.INSERT с множественным выбором SQL

INSERT INTO dv_user_akun (user_id, nik, username, password, kode_tipe, flag) 
    SELECT 
     (SELECT 
      CASE 
       WHEN right(max(user_id), 8) IS NULL 
        THEN 'USR00000001' 
        ELSE ('USR-' + RIGHT('0000000' + cast(right(max(user_id), 7) + 1 as nvarchar), 7)) 
      END user_id 
     FROM 
      dv_user_akun) as user_id, 
     (SELECT 
      Nip, Nip, '81dc9bdb52d04dc20036dbd8313ed055', PositionCode, 1 
     FROM 
      Employee 
     WHERE 
      Nip NOT IN (SELECT Nik FROM dv_user_akun)) 

Я получаю эту ошибку

Список выбора для заявления ВСТАВКИ содержит меньше элементов, чем список вставки.
Число значений SELECT должно соответствовать количеству столбцов INSERT.

ответ

2

У вас нет ничего в вашем заявлении на выбор. Я изменил ваши подзапросы на правильные объединения, а не на старый анси, который у вас есть. Единственная проблема, с которой я все еще сталкиваюсь, заключается в том, что вы используете поле Nip для вставки в поля nik и username;

INSERT INTO dv_user_akun (user_id, nik, username, password, kode_tipe, flag) 
SELECT 
a.user_id 
,b.Nip 
,b.Nip 
,b.pass 
,b.PositionCode 
,b.number 
FROM (
     SELECT CASE 
       WHEN right(max(user_id), 8) IS NULL 
        THEN 'USR00000001' 
       ELSE ('USR-' + RIGHT('0000000' + cast(right(max(user_id), 7) + 1 AS NVARCHAR), 7)) 
       END user_id 
     FROM dv_user_akun 
     ) a 
CROSS JOIN 
(
     SELECT 
      Nip 
      ,'81dc9bdb52d04dc20036dbd8313ed055' pass 
      ,PositionCode 
      ,1 number 
     FROM Employee 
     WHERE Nip NOT IN (
       SELECT Nik 
       FROM dv_user_akun 
       ) 
     ) b 
+0

спасибо, что это работает. вы делаете небольшую ошибку там 'SELECT , Nip' – YVS1102