【问题标题】:INSERT with Multiple select SQL使用多选 SQL 插入
【发布时间】:2016-06-04 18:10:55
【问题描述】:

我正在使用 SQL Server 2008。我正在尝试使用从另一个表中选择的值将数据插入到 dv_user_akun 表中。请看一下。

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))

我收到此错误

INSERT 语句的选择列表包含的项目少于插入列表。
SELECT 值的数量必须与 INSERT 列的数量相匹配。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    您的选择语句中没有任何内容。我已将您的子查询更改为正确的连接,而不是您在那里拥有的旧式 ansi 连接。我仍然遇到的唯一问题是您似乎正在使用字段 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
    

    【讨论】:

    • 感谢它有效。你在那里犯了一个小错误SELECT ,Nip
    猜你喜欢
    • 2019-02-02
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多