Использование 'LIKE' для имен столбцов в предложении where - PullRequest
0 голосов
/ 23 декабря 2011

Я начал смотреть на следующий вопрос: https://stackoverflow.com/questions/8616458/sql-query-like-clarification

К сожалению, оказалось, что первоначальный вопрос был несколько неясен, однако я решил интерпретировать это как его попытку выполнить свой запрос только при определенных столбцахв схеме соответствует его подобное состояние.Вполне возможно, что это было не то, о чем спрашивали, однако я хотел бросить вызов себе, чтобы сделать это (опубликованный как новый вопрос, так как оригинал был неясен и, вероятно, будет удален, и очень возможно, ничего не связанного с этим).

То, что я получил, было следующим:

select 
       [OrderID]
      ,[ProductID]
      ,[UnitPrice]
      ,[Quantity]
      ,[Discount]
from [Northwind].[dbo].[Order Details]
where
    (
        select top 1
                COLUMN_NAME
        from    INFORMATION_SCHEMA.columns
        where   COLUMN_NAME like '%ProductID'
    ) like '%ProductID'

Я знаю, насколько это синтаксически смешно, однако я изложил это здесь, чтобы дать вам представление о том, куда движется мой мыслительный процесс, и также надеялся, чтопо этому поводу я мог бы получить отзыв о лучшем методе выполнения запроса, только когда в базе данных есть столбец, который соответствует указанному условию?Я нигде не вижу в этом никакой цели - мне просто любопытно, и я думаю, что смогу извлечь из этого уроки.

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

В SQL ссылки на столбцы должны быть фиксированными и быть действительными на момент подготовки запроса. Недопустимо, чтобы задним числом имя столбца оказалось недействительным после начала выполнения запроса.

Решение, данное @Igor, позволяет обойти это, выполнив два запроса, первый для проверки системных таблиц, а затем условно запустить второй. Вы не можете сделать оба в одном запросе.

3 голосов
/ 23 декабря 2011

Если я вас правильно понимаю, вы можете сделать это, используя системное представление sys.columns :

IF EXISTS (SELECT 1 FROM sys.columns WHERE name LIKE '%ProductID')
SELECT *
FROM [Northwind].[dbo].[Order Details]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...