Конвертировать TSQL-запрос для доступа - PullRequest
0 голосов
/ 15 июня 2011

Мне нравится преобразовывать этот запрос в Access 2007. Каждый раз, когда я пытаюсь его запустить, в выражении запроса появляется оператор «Синтаксическая ошибка отсутствует».

Я ценю любую помощь

SELECT     
u.UserID, 
u.FirstName, 
u.LastName, 
u.Username, 
u.Email, 
u.DisplayName, 
upd.TypeOfAccess, 
upd.kusfCompanyCode FROM dbo.dnn_Users AS u INNER JOIN
dbo.dnn_UserRoles AS ur ON u.UserID = ur.UserID INNER JOIN
dbo.dnn_Roles AS r ON ur.RoleID = r.RoleID AND (r.RoleName = N'KUSF Agent' OR r.RoleName = N'KUSF Company With Agent' OR r.RoleName = N'KUSF Company Without Agent') LEFT OUTER JOIN
(SELECT     
    up.UserID, 
    MAX(CASE WHEN ppd.PropertyName = 'TypeOfAccess' THEN up.PropertyValue ELSE '' END) AS TypeOfAccess,
    MAX(CASE WHEN ppd.PropertyName = 'kusf CompanyCode' THEN up.PropertyValue ELSE '' END) AS kusfCompanyCode
FROM
    dbo.dnn_UserProfile AS up INNER JOIN
    dbo.dnn_ProfilePropertyDefinition AS ppd ON 
    up.PropertyDefinitionID = ppd.PropertyDefinitionID AND ppd.PortalID = 0 
GROUP BY up.UserID) as upd on u.UserID = upd.UserID

Ответы [ 2 ]

0 голосов
/ 15 июня 2011

Несколько "проблем", которые я вижу сразу:

  1. Access SQL не поддерживает CASE. Поскольку оба ваших оператора CASE имеют два значения, используйте Iif(<condition>, <true_part>, <false_part>).
  2. Доступ очень требователен к множественным объединениям в скобках. Работайте «последний к первому», перехватывая последнее объединение в наборе символов (оба имени таблицы - в этом случае ваш подчиненный выбор является одним из них - объединение между полями ON), затем другой закрывающий элемент после этого, который открывается непосредственно перед именем таблицы предыдущего объединения, & c. пока у вас не будет всех имен, кроме первого имени таблицы (и первого JOIN) в скобках. (Однако не обманывайте себя - это , а не фактически обеспечивает порядок оценки).
  3. Я думаю, что Access хочет LEFT JOIN, а не LEFT OUTER JOIN, но это может не иметь значения.
  4. Доступ может не поддерживать оператор "force to Unicode" N'string'. Я никогда не использовал его, но на самом деле не буду ругаться, что это неправильно (в контексте).
  5. Access предпочитает двойные кавычки для выделения строк, а не одиночные. обычно принимает одинарные кавычки.

Это может не решить вашу проблему, но может привести вас в правильном направлении.

0 голосов
/ 15 июня 2011

Проверьте этот набор правил при преобразовании запроса TSQL в запрос Access 2007, как описано в посте.Возможно, это поможет решить вашу проблему.

Конвертировать Microsoft Access (JET SQL) в SQL Server (T-SQL) Cheatsheet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...