Условный столбец SQL - PullRequest
       30

Условный столбец SQL

4 голосов
/ 06 декабря 2010

Могу ли я каким-то образом выбрать столбец, если он существует в представлении, но игнорировать столбец, если он не существует?

SELECT
    CASE
        WHEN EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn')
            THEN MyView.MyColumn
        ELSE NULL
    END AS [Sometimes]
FROM
    MyView

Прямо сейчас это возвращает ошибку «Msg 207 Invalid column name».

Возможно, есть возможность игнорировать эту ошибку?

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Вы можете сделать это, используя динамический SQL :

declare @sql varchar(200)   
IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn') 
BEGIN
    select  @sql = "SELECT Column1m Column2, MyColum from MyView"
END
ELSE
BEGIN
    select  @sql = "SELECT Column1m Column2, null as MyColum from MyView"
END 

-- executes dynamic sql
EXEC @sql
1 голос
/ 06 декабря 2010

Лучшее, что вы можете сделать, это

if EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn')
Select MyView.MyColumn from MyView
else
Select NULL MyColumn 
1 голос
/ 06 декабря 2010

Нет, это невозможно.Доступ к столбцу должен быть скомпилирован, если ничего другого, и это происходит до того, как выражение, подавляющее его, будет оценено.Для этого вам нужно генерировать SQL на лету.

...