代码之家  ›  专栏  ›  技术社区  ›  Ratha

如何用sql中的命令将记录插入到transportable has;中?

  •  0
  • Ratha  · 技术社区  · 5 年前

    我已经创建了一个临时表,我想填写记录。

    我的问题是:

    create table #temp(companysitetankid int, [SourceGradeName] varchar(50), SiteCode varchar(50));
    
    ;with cst  as (
        select companysitetankid,[SourceGradeName], SiteCode,
               row_number() over (partition by [SourceGradeName] order by [TankNumber] ) rn
        from [DataManagement_DB].[dbo].[CompanySiteTank]  where CompanyCode='Aaaa'
     )
     select * from cst where  rn >1
    
     insert into #temp
     select companysitetankid,[SourceGradeName], SiteCode from cst  
    

    这里我得到的表cst是无效的。

    对象名“cst”无效。

    我在上面的问题中做错了什么?

    2 回复  |  直到 5 年前
        1
  •  3
  •   Tim Biegeleisen    5 年前

    一旦你的CTE化名为 cst 已用于 SELECT 声明,不能再使用这可能是你想要做的:

    WITH cst AS (
        SELECT companysitetankid, [SourceGradeName], SiteCode,
           ROW_NUMBER() OVER (PARTITION BY [SourceGradeName] ORDER BY [TankNumber]) rn
        FROM [DataManagement_DB].[dbo].[CompanySiteTank]
        WHERE CompanyCode = 'Aaaa'
    )
    
    INSERT INTO #temp
    SELECT companysitetankid, [SourceGradeName], SiteCode
    FROM cst
    WHERE rn > 1;
    

    如果您真的需要运行该select来检查返回的内容,那么可以在侧边运行它,但是当您在insert中实际使用它时将其删除。

        2
  •  1
  •   Gordon Linoff    5 年前

    您可以在一个语句中完成此操作:

    with cst as (
          select companysitetankid, [SourceGradeName], SiteCode,
                 row_number() over (partition by [SourceGradeName] order by [TankNumber] ) rn
          from [DataManagement_DB].[dbo].[CompanySiteTank]
          where CompanyCode='Aaaa'
         )
    insert into #temp
        select companysitetankid,[SourceGradeName], SiteCode 
        from cst  
        where rn > 1;
    

    注意:当您使用 insert .