我试图在SQL code
中创建SQL Server
,动态选择特定数据库中的所有表,然后为每个表中的每一列计算缺失值和非空值的数量。我也希望将此结果插入到另一个表中。
如果不手动更改每个列的名称,我有什么方法可以做到这一点:
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 ||')
这方面的任何帮助都会很棒! 谢谢!
答案 0 :(得分: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
希望有所帮助
答案 1 :(得分:0)
这样的事情可以帮到你:
SELECT [Table] = t.[name]
, [Column] = c.[name]
FROM sys.tables t
INNER JOIN sys.columns c
ON c.[object_id] = t.[object_id]