Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ошибка вызова функции, возвращающей табличное значение  [new]
бегемотиха
Member

Откуда:
Сообщений: 80
подскажите, пожалуйста, как можно решить следующую проблему
я пробую выполнить запрос следюущий

SELECT dbo.Клиенты.Номер, dbo.Клиенты.Клиент, dbo.[Сотрудники клиентов].[Дата ввода]
FROM dbo.Клиенты INNER JOIN
dbo.[Сотрудники клиентов] ON dbo.Клиенты.Номер = dbo.[Сотрудники клиентов].КодЗаказчики
where month(dbo.[Сотрудники клиентов].[Дата ввода]) not in (select number from [dbo].[iter_intlist_to_table](Клиенты.Номер) )


мне выдается следующая ошибка:
Неправильный синтаксис около конструкции ".".
на последнюю строчку соответственно на вызов функции возвращающей табличное значение [dbo].[iter_intlist_to_table]

если я пробую сделать выборку по одной таблице и соответственно запрос следующего вида
select Номер, Клиент
FROM Клиенты
where month(getdate()) not in (select number from [dbo].[iter_intlist_to_table](Номер))

то он выдает мне следующую ошибку

Номер не является допустимым параметром табличных подсказок. Если он предназначен в качестве параметра возвращающей табличное значение функции, убедитесь, что в качестве значения режима совместимости базы данных указано 90.


заранее спасибо за помощь
2 авг 11, 17:29    [11060548]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
бегемотиха
Member

Откуда:
Сообщений: 80
сама функция следующая

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[iter_intlist_to_table] (@id INTEGER)
RETURNS @tbl TABLE (listpos int IDENTITY(1, 1) NOT NULL, number int NOT NULL)
AS

BEGIN
DECLARE @ResSp nvarchar(4000)
SET @ResSp = ''
SELECT @ResSp = convert( ntext,Период ) FROM dbo.СОПР_Сумма
WHERE (Год = year(getdate())) AND (ФС = 1) and Номер=@id


DECLARE @pos int,
@textpos int,
@chunklen smallint,
@str nvarchar(4000),
@tmpstr nvarchar(4000),
@leftover nvarchar(4000)

SET @textpos = 1
SET @leftover = ''
WHILE @textpos <= datalength( @ResSp) / 2
BEGIN
SET @chunklen = 4000 - datalength(@leftover) / 2
SET @tmpstr = ltrim(@leftover + substring( @ResSp, @textpos, @chunklen))
SET @textpos = @textpos + @chunklen

SET @pos = charindex(',', @tmpstr)
WHILE @pos > 0
BEGIN
SET @str = substring(@tmpstr, 1, @pos - 1)
INSERT @tbl (number) VALUES(convert(int, @str))
SET @tmpstr = ltrim(substring(@tmpstr, @pos + 1, len(@tmpstr)))
SET @pos = charindex(',', @tmpstr)
END

SET @leftover = @tmpstr
END

IF ltrim(rtrim(@leftover)) <> ''
INSERT @tbl (number) VALUES(convert(int, @leftover))

RETURN

END
2 авг 11, 17:31    [11060567]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
Glory
Member

Откуда:
Сообщений: 104751
Если версия больше 2000, то читать про CROSS APPLY
2 авг 11, 17:31    [11060569]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
бегемотиха
Member

Откуда:
Сообщений: 80
попробавала следующий код

select Номер, Клиент
FROM Клиенты
where month(getdate()) not in (select i.number from Клиенты cross apply [iter_intlist_to_table](Клиенты.Номер) i)


опять выдал сообщение про точку
2 авг 11, 17:42    [11060653]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
 apply dbo.[iter_intlist_to_table](  
2 авг 11, 18:16    [11060874]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
бегемотиха,

версию сервера скажете или не ждать?
2 авг 11, 20:31    [11061243]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
проблема скорее здесь: Номер не является допустимым параметром табличных подсказок. Если он предназначен в качестве параметра возвращающей табличное значение функции, убедитесь, что в качестве значения режима совместимости базы данных указано 90
2 авг 11, 22:22    [11061591]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
бегемотиха
Member

Откуда:
Сообщений: 80
iap,

2000
3 авг 11, 07:49    [11062305]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
бегемотиха
Member

Откуда:
Сообщений: 80
SIMPLicity_,

а где должен указываться режим совместимости?
3 авг 11, 07:50    [11062306]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
бегемотиха
iap,

2000

Не будет работать с CROSS APPLY, кстати вам уже сказали об этом.
3 авг 11, 07:54    [11062310]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
бегемотиха
Member

Откуда:
Сообщений: 80
Ken@t,
тогда как можно решить эту проблему
3 авг 11, 08:09    [11062331]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> тогда как можно решить эту проблему

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

ну, или переходите на следующую версию сервера.

Posted via ActualForum NNTP Server 1.4

3 авг 11, 08:15    [11062351]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
бегемотиха
тогда как можно решить эту проблему

Не хранить список в одном поле Клиенты.Номер , а сделать полноценную таблицу.
3 авг 11, 08:16    [11062352]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Не хранить список в одном поле Клиенты.Номер

ааа - вон там зачем функция! слона-то я спросоня и не приметил.
да уж, +100500 - переделывайте это чудо нафиг.

Posted via ActualForum NNTP Server 1.4

3 авг 11, 08:23    [11062375]     Ответить | Цитировать Сообщить модератору
 Re: ошибка вызова функции, возвращающей табличное значение  [new]
бегемотиха
Member

Откуда:
Сообщений: 80
спасибо за помощь
3 авг 11, 08:43    [11062431]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить