【问题标题】:How to dynamically select tables and columns in SQL Server?如何在 SQL Server 中动态选择表和列?
【发布时间】:2015-07-16 10:07:59
【问题描述】:

我正在尝试在SQL Server 中创建一个SQL code,它动态选择特定数据库中的所有表,然后为每个表中的每一列计算缺失值和非空值的数量。我还希望将此结果插入另一个表中。

有什么方法可以在不手动更改每个列名的情况下做到这一点:

Table Name - Column selection

我有一个相同的 teradata 代码,我尝试将其转换为 SQL Server code。但我无法正确获取动态分配和插入部分。

insert into temp
values (select  ''CAMP'',
    rtrim(''' || tablename || '''),
    rtrim(''' || columnname || '''),
    rtrim(''' || columnformat || '''),
    count(1),
    count(rtrim(upper(case when ' || columnname || '='''' then NULL else '|| columnname ||' end))),
    (cast (count(rtrim(upper(case when  ' || columnname || '='''' then NULL else  ' || columnname || ' end))) as float) / (cast (count(1) as float))) * 100,
    count(distinct rtrim(upper(case when ' || columnname || '='''' then NULL else '|| columnname ||' end))),
    min(rtrim(upper(case when ' || columnname || '='''' then NULL else '|| columnname ||' end))),
    max(rtrim(upper(case when ' || columnname || '='''' then NULL else '|| columnname ||' end))),
    min(len(rtrim(upper(case when ' || columnname || '='''' then NULL else '|| columnname ||' end)))),
    max(len(rtrim(upper(case when ' || columnname || '='''' then NULL else '|| columnname ||' end))))
from    ' || tablename ||')

在这方面的任何帮助都会很棒! 谢谢!

【问题讨论】:

  • 分享你的尝试。
  • 我编辑了问题以包含我尝试过的内容。任何帮助都会很棒。
  • 您可以尝试在SQL中查看,而不是从不同的表中选择数据并将它们插入另一个表中。
  • 我正在尝试使用它来创建所有现有表的视图以及有关它们的一些基本信息。这将帮助我了解我所有表格中的数据类型。

标签: sql sql-server procedure


【解决方案1】:

不确定您是否需要UNION 或JOIN,但在任何一种情况下,如果您使用多数据库,您都可以只为另一个数据库中的对象使用三部分名称:

USE database1; // Your database name
GO
CREATE VIEW dbo.MyView
AS
    SELECT columns FROM dbo.Table1
    UNION ALL
    SELECT columns FROM database2.dbo.Table2; //second database
GO

select * from dbo.MyView // Getting all data from view

希望有帮助

【讨论】:

    【解决方案2】:

    这样的事情对你有帮助吗:

        SELECT  [Table] = t.[name]
            , [Column] = c.[name]
        FROM    sys.tables t
        INNER   JOIN    sys.columns c
            ON  c.[object_id] = t.[object_id]
    

    【讨论】:

      猜你喜欢
      • 2014-05-14
      • 1970-01-01
      • 2014-07-29
      • 2021-10-08
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      相关资源
      最近更新 更多