2015-06-22 4 views
0

У меня возникла проблема, проходящая через столбец за столбцом и получающая количество всех ненулевых значений в каждом столбце. Я думаю, что проблема заключается в том, как я получаю имена столбцов. В последнем предложении 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; 

ответ

1

select @variable просто вернет вам значение переменной. Мне нужно использовать какой-то динамический SQL. Может быть, smth вроде exec ('select' + @colname + 'from' и т. Д.) Будет работать для вас (по крайней мере, он будет работать на сервере MS SQL).

+0

Это работает отлично, спасибо. Хороший способ заставить Exec работать. – Shawn

0

Не совсем уверен, но почему вы не можете напрямую сделать как

SELECT column1, column2,column3 
    FROM [mySchema].[dbo].[tblName] 
    WHERE column1 is not null 
    AND column2 is not null 
    AND column3 is not null 
+0

Я пытаюсь написать sql-скрипт для использования в любой таблице, поэтому я пытался исключить имена столбцов. – Shawn