我遇到一个问题,一列一行,并计算每列中所有非空值的计数。我认为问题是如何获取列名称。在我尝试选择每列中的所有值的最后一个select语句中,我只是获取列名称的行数。关于如何解决这个问题的任何想法?
DECLARE @cnt INT = 1;
WHILE @cnt < (SELECT COUNT(*)
FROM mySchema.INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tblName') + 1
BEGIN
DECLARE @column varchar(9) = (select column_name
FROM mySchema.INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tblName'
AND ordinal_position = @cnt);
SELECT @column
FROM [mySchema].[dbo].[tblName]
WHERE @column is not null
AND @column <> ''
SET @cnt = @cnt + 1;
END;
答案 0 :(得分:1)
选择@variable只会返回一个变量值。您需要使用一些我相信的动态SQL。也许像exec一样smth(&#39; select&#39; + @colname +&#39;来自&#39;等)将适合你(至少它可以在MS SQL服务器中工作)。
答案 1 :(得分:0)
不完全确定,但为什么你不能直接做
SELECT column1, column2,column3
FROM [mySchema].[dbo].[tblName]
WHERE column1 is not null
AND column2 is not null
AND column3 is not null