SQL Server:从具有显式值的一个表中INSERT

时间:2018-04-09 18:44:58

标签: sql sql-server database tsql

更新:感谢所有纠正我的arg订单和展示位置的人。我能够纠正我的回答。似乎前一个问题回答了这个问题(以前,我认为它与SQL Server不兼容)。我愿意接受有关是否应该删除的反馈意见。

在SQL Server中,是否可以将来自另一个表AS WELL的信息作为显式值插入?我想的是以下内容:

INSERT INTO [dbo].[GABAD01_CNTNR]
       (
       [ABAL01_CNTNR_TYP_C]
       ,[ABAL02_ZONE_C]
       ,[ABAL03_ENVMT_C]
       ,[ABAL06_LOC_TYP_C]
       ,[ABAD01_CNTNR_LOC_X]
       ,[ABAD01_CNTNR_K]
       ,[ABAD01_PARNT_CNTNR_K]
       ,[ABAD01_CRT_S]
       ,[ABAD01_CRT_CDSID_C]
       ,[ABAD01_LST_UPDT_S]
       ,[ABAD01_LST_UPDT_CDSID_C])
      ( SELECT
    (
       ([ABAL01_CNTNR_TYP_C]
       ,[ABAL02_ZONE_C]
       ,[ABAL03_ENVMT_C]
       ,[ABAL06_LOC_TYP_C]
       ,[ABAE01_CNTNR_LOC_X]
    ) FROM GABAE01_INFA_CNTNR WHERE ABAE01_INFA_CNTNR_K = 'DB_000000')
       ,'TBL_000000'
       ,'DB_000000'
       ,CURRENT_TIMESTAMP
       ,'webd'
       ,CURRENT_TIMESTAMP
       ,'webd')
GO

3 个答案:

答案 0 :(得分:3)

是的,只需将它们放入SELECT列表中:

INSERT INTO [dbo].[GABAD01_CNTNR] (
       [ABAL01_CNTNR_TYP_C]
       ,[ABAL02_ZONE_C]
       ,[ABAL03_ENVMT_C]
       ,[ABAL06_LOC_TYP_C]
       ,[ABAD01_CNTNR_LOC_X]
       ,[ABAD01_CNTNR_K]
       ,[ABAD01_PARNT_CNTNR_K]
       ,[ABAD01_CRT_S]
       ,[ABAD01_CRT_CDSID_C]
       ,[ABAD01_LST_UPDT_S]
       ,[ABAD01_LST_UPDT_CDSID_C])
SELECT
        [ABAL01_CNTNR_TYP_C]
       ,[ABAL02_ZONE_C]
       ,[ABAL03_ENVMT_C]
       ,[ABAL06_LOC_TYP_C]
       ,[ABAE01_CNTNR_LOC_X]
       ,'TBL_000000'
       ,'DB_000000'
       ,CURRENT_TIMESTAMP
       ,'webd'
       ,CURRENT_TIMESTAMP
       ,'webd'
FROM GABAE01_INFA_CNTNR 
WHERE ABAE01_INFA_CNTNR_K = 'DB_000000'

答案 1 :(得分:2)

在选择列表中包含硬编码值:

INSERT INTO [dbo].[GABAD01_CNTNR]
   (
   [ABAL01_CNTNR_TYP_C]
   ,[ABAL02_ZONE_C]
   ,[ABAL03_ENVMT_C]
   ,[ABAL06_LOC_TYP_C]
   ,[ABAD01_CNTNR_LOC_X]
   ,[ABAD01_CNTNR_K]
   ,[ABAD01_PARNT_CNTNR_K]
   ,[ABAD01_CRT_S]
   ,[ABAD01_CRT_CDSID_C]
   ,[ABAD01_LST_UPDT_S]
   ,[ABAD01_LST_UPDT_CDSID_C]
   )
   SELECT
   [ABAL01_CNTNR_TYP_C]
   ,[ABAL02_ZONE_C]
   ,[ABAL03_ENVMT_C]
   ,[ABAL06_LOC_TYP_C]
   ,[ABAE01_CNTNR_LOC_X]
   ,'TBL_000000'
   ,'DB_000000'
   ,CURRENT_TIMESTAMP
   ,'webd'
   ,CURRENT_TIMESTAMP
   ,'webd'
 FROM GABAE01_INFA_CNTNR WHERE ABAE01_INFA_CNTNR_K = 'DB_000000'

答案 2 :(得分:2)

select

中加入显式值
INSERT INTO [dbo].[GABAD01_CNTNR] ( . . . )
     SELECT [ABAL01_CNTNR_TYP_C], 
            [ABAL02_ZONE_C], 
            [ABAL03_ENVMT_C], 
            [ABAL06_LOC_TYP_C], 
            [ABAE01_CNTNR_LOC_X],
            'TBL_000000',
            'DB_000000',
            CURRENT_TIMESTAMP,
            'webd',
             CURRENT_TIMESTAMP,
            'webd'
    FROM GABAE01_INFA_CNTNR
    WHERE ABAE01_INFA_CNTNR_K = 'DB_000000';

您的额外括号不以任何方式帮助查询。我使用. . .缩短了列,因此您可以更轻松地查看select部分。