Проблема с использованием fn_listextendedproperty, Почему эта ошибка запроса в четвертом столбце на MSSQL2008 - PullRequest
1 голос
/ 09 июля 2009

Если вы просто проголосуете за это и не скажете мне, как сделать лучше , какой смысл? Как я могу научиться делать вопрос лучше, если вы проголосуете -1, а не оставляете мне комментарий.

select
   u.name,
   o.name,
   case (o.type) when 'S' then 'SYSTEM TABLE' else 'TABLE' end,
   (select convert(varchar(8000), value) from ::fn_listextendedproperty(NULL, 'user', u.name, 'table', o.name, null, null) where name = 'MS_Description') as coln
from
   sys.sysobjects o
   join sys.schemas  u on (u.schema_id = o.uid)
where
   o.type in ('U', 'S')
   and u.name = "something here"
order by 1, 2

Есть ли простое исправление, чтобы заставить его работать или все в порядке?

Ошибка:

SQLSTATE = 42000, Microsoft SQL Native Client, Incorrect Syntax near ‘u’ 

Эта справка для функции практически бесполезна.

Это выглядит как анти-sql, анти-нормализация данных, довольно тупой способ хранения комментариев к таблице.

Почему в представлении all_tables нет столбца комментариев?

Обновление

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

** Обновление II **

Я заменил собственный драйвер 2005 года на собственный драйвер 2007 года, и он больше не выдает ошибок, но возвращает таблицы ZERO . ODBC работает нормально.

Ответы [ 2 ]

0 голосов
/ 10 июля 2009

У вас плохая квадратная скобка:

[  and u.name = %.q:OWNER%]

должно быть

и u.name = [% .q: OWNER%]

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

Я бы также исправил этот «порядок на 1,2» и использовал вместо этого имена столбцов.

0 голосов
/ 09 июля 2009

Работает ли это, если вы используете CROSS APPLY вместо вложенного SELECT?

select
   u.name,
   o.name,
   case (o.type) when 'S' then 'SYSTEM TABLE' else 'TABLE' end,
   convert(varchar(8000), ex.value) as coln
from
   [%CATALOG%.]sys.sysobjects o
   join [%CATALOG%.]sys.schemas  u on (u.schema_id = o.uid)
   cross apply ::fn_listextendedproperty(NULL, 'user', u.name, 'table', o.name, null, null) ex
where
   o.type in ('U', 'S')
[  and u.name = %.q:OWNER%]
and ex.name = 'MS_Description'
order by 1, 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...