【问题标题】:Insert from one table to another (different databases)从一个表插入到另一个(不同的数据库)
【发布时间】:2016-08-29 07:32:52
【问题描述】:

Auth2.dbo.Accounts : account_id、login_name、password、其他列...

Auth.dbo.Account : account_id 、 account 、 password 、其他列...

我想将帐户(account_id,account,password)从“Auth.dbo.Account”插入到“Auth2.dbo.Accounts”(account_id,login_name,密码)并提供我想要的其他列值。

我希望这可以工作,但是一旦我在 SQL Management Studio 中编写,我在“从 Auth.dbo.account 中选择 account_id”附近出现错误语法错误

INSERT [dbo].[Accounts] ([account_id], [login_name], [password],
       [referral_id], [referral_code], [pcbang], [block],
       [withdraw_remain_time], [age], [auth_ok],
       [last_login_server_idx], [event_code], [server_list_mask], 
       [result], [ip], [game_code], [gamecode], [login_event],
       [email], [security_a_1], [security_a_2], [security_a_3],
       [security_a_4], [security_q_1], [security_q_2], [security_q_3],
       [security_q_4], [votepoints], [cash], [country]) 
VALUES (select account_id from auth.dbo.Account, N'Imad', 
               N'3cfbbd2ae3c3e416c6d00a5a12ee60e8', NULL, NULL, 
               0, 0, NULL, -1997, 1, NULL, NULL, NULL, NULL, 
               N'::1', NULL, NULL, NULL, N'imad.lekal@outlook.com',
               NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
               0, 189, NULL)

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    尝试使用简单的INSERT/SELECT。在这种情况下,account_id 将来自 auth.dbo.Account,所有其他值都是常量。

    INSERT Auth2.[dbo].[Accounts] ([account_id], [login_name], [password], [referral_id], [referral_code], [pcbang], [block], [withdraw_remain_time], [age], [auth_ok], [last_login_server_idx], [event_code], [server_list_mask], [result], [ip], [game_code], [gamecode], [login_event], [email], [security_a_1], [security_a_2], [security_a_3], [security_a_4], [security_q_1], [security_q_2], [security_q_3], [security_q_4], [votepoints], [cash], [country]) 
    select account_id , N'Imad', N'3cfbbd2ae3c3e416c6d00a5a12ee60e8', NULL, NULL, 0, 0, NULL, -1997, 1, NULL, NULL, NULL, NULL, N'::1', NULL, NULL, NULL, N'imad.lekal@outlook.com', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 189, NULL from auth.dbo.Account;
    

    【讨论】:

    • 整个第一行无效,表示列名无效,因为我们没有指定任何数据库
    • @Dablackninja 好的,现在尝试插入表上的 Auth2 引用
    • 修复了这个问题,不过是一个问题。如果我们为其他列选择并赋予 valeus “null,null,0,0 ....”,我们是插入它们还是选择它们?因为其他列!= 其他表的 other_columns
    • @Dablackninja 您正在使用此常量值在 auth2 表上创建新行。除 account_id 外,所有插入的行都相同。例如,所有行都将N'imad.lekal@outlook.com'作为电子邮件。
    • 我使用了查询,但他们没有相同的登录名和密码,为什么会这样?我现在关掉了,如果他们注册了,account_id应该每次都增加。我只用了你给我的查询来合并,不需要删除所有帐户!谢谢
    【解决方案2】:

    删除VALUES (

    当您 INSERT 使用 SELECT 时,您不应使用 VALUES,因为这些值来自 SELECT

    假设AuthAuth2 是两个不同的数据库,还要在表名前加上数据库名称。

    最后,您的FROM 已关闭。

    以下应该可以工作。

    INSERT Auth2.dbo.Accounts 
    (
    [account_id]
    , [login_name]
    , [password]
    , [referral_id]
    , [referral_code]
    , [pcbang]
    , [block]
    , [withdraw_remain_time]
    , [age]
    , [auth_ok]
    , [last_login_server_idx]
    , [event_code]
    , [server_list_mask]
    , [result]
    , [ip]
    , [game_code]
    , [gamecode]
    , [login_event]
    , [email]
    , [security_a_1]
    , [security_a_2]
    , [security_a_3]
    , [security_a_4]
    , [security_q_1]
    , [security_q_2]
    , [security_q_3]
    , [security_q_4]
    , [votepoints]
    , [cash]
    , [country]
    ) 
    SELECT 
    account_id 
    , N'Imad'
    , N'3cfbbd2ae3c3e416c6d00a5a12ee60e8'
    , NULL
    , NULL
    , 0
    , 0
    , NULL
    , -1997
    , 1
    , NULL
    , NULL
    , NULL
    , NULL
    , N'::1'
    , NULL
    , NULL
    , NULL
    , N'imad.lekal@outlook.com'
    , NULL
    , NULL
    , NULL
    , NULL
    , NULL
    , NULL
    , NULL
    , NULL
    , 0
    , 189
    , NULL
    FROM auth.dbo.Account
    

    专业提示:正确格式化您的 SQL,这有助于调试 :)。

    【讨论】:

      【解决方案3】:

      您好,我认为这首先会帮助您创建 数据库链接

      CREATE DATABASE LINK your_db_link_name
       CONNECT TO Schema_Name
       IDENTIFIED BY <PWD>
       USING 'Your Database Name';
      

      接下来你需要进行查询

      INSERT [Accounts] ([account_id], [login_name], [password], [referral_id]
            , [referral_code], [pcbang], [block], [withdraw_remain_time], [age], [
            auth_ok], [last_login_server_idx], [event_code], [server_list_mask], [
            result], [ip], [game_code], [gamecode], [login_event], [email], [
            security_a_1], [security_a_2], [security_a_3], [security_a_4], [
            security_q_1], [security_q_2], [security_q_3], [security_q_4], [
            votepoints], [cash], [country])
            VALUES (
            select ac.account_id
            from Your_DB_Link_Name@Account ac, N'Imad', N'3cfbbd2ae3c3e416c6d00a5a12ee60e8',
            NULL, NULL, 0, 0, NULL, -1997, 1, NULL, NULL, NULL, NULL, N'::1', NULL,
            NULL, NULL, N'imad.lekal@outlook.com', NULL, NULL, NULL, NULL, NULL,
            NULL, NULL, NULL, 0, 189, NULL)
      

      如果您有任何疑问,我认为这会对您有所帮助,请随意

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-30
        • 2016-07-19
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多