【问题标题】:How do I accept just the column names of a table and then feed into another table?如何只接受一个表的列名,然后输入另一个表?
【发布时间】:2021-07-30 07:34:58
【问题描述】:
SELECT (SELECT SC.NAME COLUMN_NAMES FROM 
SYS.TABLES ST INNER JOIN SYS.COLUMNS SC
ON ST.OBJECT_ID=SC.OBJECT_ID
WHERE ST.NAME = 'EMP_TABLE') 
INTO FINAL_TABLE FROM EMP_TABLE SRC 
INNER JOIN HIST_TABLE TMP
ON SRC.ID=TMP.ID AND SRC.UPDATEDATE=TMP.UPDATEDATE
WHERE UID>@UID and UID<=@UID + @BATCHSIZE;

我写的查询会起作用吗?我对子查询的问题感到困惑。 请帮帮我。 提前致谢。

【问题讨论】:

  • 您需要将子查询移动到FROM 并给它一个而不是INTO 使用AS 给它一个别名
  • 那我在select之后放什么?和 into 用于将子查询的输出(即列)插入 final_table
  • OK 从头开始​​:你的数据是什么,你想要达到什么目标?

标签: sql sql-server tsql subquery


【解决方案1】:

如果您想使用用户表的列创建一个空表,只需执行查询:

SELECT SRC.*
INTO   FINAL_TABLE
FROM   EMP_TABLE SRC
WHERE  1 = 2 

【讨论】:

  • 有很多表,我正在尝试创建一个动态查询。所以 EMP_TABLE 只是众多表之一,因此我使用系统表通过动态传递表名来获取列名的原因。一旦我收到列名,它们应该在第一个 select 语句中使用,然后插入到 final_table
  • 你可以使用动态sql来做到这一点
  • 这就是我卡住的地方,我是新手。
  • with cte AS (SELECT SC.NAME COLUMN_NAMES FROM SYS.TABLES ST INNER JOIN SYS.COLUMNS SC ON ST.OBJECT_ID=SC.OBJECT_ID WHERE ST.NAME = '@TABLENAME') 选择 cte.*从 cte 进入 FINAL_TABLE 会有这样的工作吗?
  • @Shreya 。 . .这是创建空表的更好解决方案,因为它保留了类型。你还没有解释你的代码应该做什么。您可能想提出一个新的问题并给出适当的解释。
【解决方案2】:

这对我有用。

Select * INTO NewTable
From (
select
   syscolumns.name as [Column]
from 
   sysobjects 
inner join 
   syscolumns on sysobjects.id = syscolumns.id
where sysobjects.xtype = 'u'
and   sysobjects.name = 'Employee') t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2023-04-01
    • 2017-01-27
    • 1970-01-01
    • 2016-11-08
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多