Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL 2005 Table-valued function в JOIN ошибка cannot have a column alias?  [new]
Pvase
Member

Откуда:
Сообщений: 982
Есть функция, возвращающая набор данных в виде таблицы.
Вот такой запрос по выборке данных из функции работает нормально:
SELECT T1.* FROM dbo.Справочник_Контрагенты_ПР('20090930') AS T1
Но вот если функцию приджойнить то получается ошибка:
DECLARE @DATEN Char(8)
DECLARE @DATEK Char(8)
SET @DATEN = '20090901'
SET @DATEK = '20090930'
SELECT 
	TReg.Контрагент AS Контрагент,
	SUM(TReg.Долг * TReg.ПриходРасход) AS ДолгРасход
FROM 
	dbo.Регистр_ВзаиморасчетыПокупателей AS TReg (NOLOCK)
	INNER JOIN _1SJOURN AS TJourn (NOLOCK) ON (TJourn.IDDOC = TReg.IDDOC)
	INNER JOIN dbo.Справочник_Контрагенты_ПР(@DATEK) AS TKontr (NOLOCK) ON (TKontr.ID = TReg.Контрагент)
WHERE 
	TJourn.DATE_TIME_IDDOC >= @DATEN
	AND TJourn.DATE_TIME_IDDOC <= @DATEK + 'Z'
GROUP BY
	TReg.Контрагент
ORDER BY
	TReg.Контрагент
	
Ошибка -
Table-valued function 'Справочник_Контрагенты_ПР' cannot have a column alias.

Как можно приджойнить результат функции в приведенном примере?
2 ноя 09, 18:28    [7873302]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2005 Table-valued function в JOIN ошибка cannot have a column alias?  [new]
Pvase
Member

Откуда:
Сообщений: 982
Pvase,
Понал, в строке:
INNER JOIN dbo.Справочник_Контрагенты_ПР(@DATEK) AS TKontr (NOLOCK) ON (TKontr.ID = TReg.Контрагент)

(NOLOCK) - лишнее.
2 ноя 09, 18:31    [7873318]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2005 Table-valued function в JOIN ошибка cannot have a column alias?  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Не совсем.
Просто табличные хинты теперь нужно указывать обязательно используя ключевое слово with()
2 ноя 09, 20:19    [7873585]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2005 Table-valued function в JOIN ошибка cannot have a column alias?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
DeColo®es
Не совсем.
Просто табличные хинты теперь нужно указывать обязательно используя ключевое слово with()
NOLOCK пока является исключением: если это единственный хинт, то WITH необязательно.
2 ноя 09, 21:14    [7873699]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2005 Table-valued function в JOIN ошибка cannot have a column alias?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Pvase,

покажите, пожалуйста, результат запроса
DECLARE @DATEK Char(8)
SET @DATEK = '20090930'
SELECT TOP 1 * FROM dbo.Справочник_Контрагенты_ПР(@DATEK)
2 ноя 09, 21:26    [7873731]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2005 Table-valued function в JOIN ошибка cannot have a column alias?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
DeColo®es
Не совсем.
Просто табличные хинты теперь нужно указывать обязательно используя ключевое слово with()
NOLOCK пока является исключением: если это единственный хинт, то WITH необязательно.
Видно, функция может иметь алиас, подобно таблице, но перечислять алиасы колонок после него нельзя - с одной стороны.
И функция не может иметь табличные хинты - с другой.
Только что проверил в SQL2008. Получилось то же самое.

Я хочу сказать, что WITH(NOLOCK) здесь тоже не поможет.
2 ноя 09, 22:23    [7873883]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2005 Table-valued function в JOIN ошибка cannot have a column alias?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
Pvase,

покажите, пожалуйста, результат запроса
DECLARE @DATEK Char(8)
SET @DATEK = '20090930'
SELECT TOP 1 * FROM dbo.Справочник_Контрагенты_ПР(@DATEK)
Не надо ничего показывать - и так всё ясно.
2 ноя 09, 22:24    [7873886]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить