从表名称中选择

时间:2021-04-08 03:56:12

标签: sql-server database select insert union-all

我在 SQL Server 数据库 (SSMS) 中有 1000 个表,想将 1000 个表中的选定列合并到 1 个新表中。

我想做这样的事情

  1. 创建一个包含 a、b、c 列的新表

  2. 确定要从中选择数据的 1000 个表 - 要根据通配符之类的内容选择表名。

    在数据库中,有很多表,名称都遵循类似的模式,例如ABC_0001, ABC_0002 ... ABC_1000, XYZ_0001, XYZ_0002, ... XYZ_1000 等等...我只想要以ABC 待选..

  3. 从这 1000 个表中选择列 a、b、c 并将值插入到步骤 #1 中创建的表中

我是这样做的:

SELECT a, b, c FROM ABC_0001 UNION_ALL
SELECT a, b, c FROM ABC_0002 UNION_ALL
SELECT a, b, c FROM ABC_1000 
INSERT INTO NEW_TABLE

并且想做类似的事情

SELECT a, b, c FROM TABLE LIKE ABC_% 
INSERT INTO NEW_TABLE

2 个答案:

答案 0 :(得分:2)

您可以使用 [2021-04-08 05:47:47,431] {taskinstance.py:901} INFO - Executing <Task(PythonOperator): a> on 2021-04-08T05:47:31.333405+00:00 [2021-04-08 05:47:47,434] {standard_task_runner.py:54} INFO - Started process 2665 to run task [2021-04-08 05:47:47,463] {standard_task_runner.py:77} INFO - Running: ['airflow', 'run', 'trigger_dag', 'a', '2021-04-08T05:47:31.333405+00:00', '--job_id', '36', '--pool', 'default_pool', '--raw', '-sd', 'DAGS_FOLDER/trigger.py', '--cfg_path', '/tmp/tmpwoshw679'] [2021-04-08 05:47:47,464] {standard_task_runner.py:78} INFO - Job 36: Subtask a [2021-04-08 05:47:47,512] {logging_mixin.py:112} INFO - Running <TaskInstance: trigger_dag.a 2021-04-08T05:47:31.333405+00:00 [running]> on host 953a6668d603 [2021-04-08 05:47:47,564] {logging_mixin.py:112} INFO - super-duper [2021-04-08 05:47:47,564] {python_operator.py:114} INFO - Done. Returned value was: None [2021-04-08 05:47:47,574] {taskinstance.py:1070} INFO - Marking task as SUCCESS.dag_id=trigger_dag, task_id=a, execution_date=20210408T054731, start_date=20210408T054747, end_date=20210408T054747 [2021-04-08 05:47:52,388] {local_task_job.py:102} INFO - Task exited with return code 0 Dynamic SQL 来实现这一点,我使用 CURSOR OR WHILE LOOP 实现了它。如果您不想在新表中插入重复条目,请使用 CURSOR 而不是 UNION

UNION ALL

答案 1 :(得分:0)

您可以执行以下操作:

-- use 'UNION' to select only distinct values, and UNION ALL if you want to select all rows

SELECT * 
    INTO [NEW_TABLE]
        FROM ABC_001
            UNION ALL
        SELECT * FROM ABC_002
            UNION ALL
        SELECT * FROM ABC_003
            UNION ALL
        -- and so on...
        SELECT * FROM ABC_999
        -- there's no need to use UNION on the last select

如果您真的不想键入所有 999 多个表,您可以编写一个存储过程来从名称与您想要的模式匹配的表中进行选择。

参考文献:
https://www.w3schools.com/sql/sql_ref_union.asp
SELECT INTO USING UNION QUERY
SQL Server select data from 100+ tables

相关问题