2014-11-06 4 views
1

Я определил табличную функцию X с 11 параметрами. Их типы nvarchar(30), nvarchar(30), datetime, datetime, nvarchar(15), nvarchar(4), xml, nvarchar(8), nvarchar(80), bit и bit соответственно. Это для Microsoft SQL Server 2012. Когда я вызываю функцию сОшибка SQL Server 2012: Параметры для функции X

select * from 
X('A','B','2014-01-01','2014-12-31',null,null,'<C><D>E</D></C>',null,null,1,0) 

Я бегу в эту ошибку:

Parameters were not supplied for the function X 

Это, по-видимому отличается от следующих двух:

An insufficient number of arguments were supplied for the procedure or function X 
Procedure or function X has too many arguments specified. 

Связано ли это с двумя значениями предполагаемых параметров: null? Как я могу преодолеть проблему и определить/вызвать табличную функцию, такую ​​как 11 параметров, некоторые из которых могут нести null?

UPDATE Проблема остается, если я передаю произвольные строки вместо null. Поэтому должна быть другая (возможно, глупая) ошибка.

+0

Можете ли вы дать первые строки объявления функции для X? – Mithrandir

+1

Я определил tvf, как тот, который вы описали, и использовал свой запрос для тестирования. Он выполняется без каких-либо проблем. Должна быть проблема с определением функции –

+0

Можете ли вы предоставить вам функцию. –

ответ

4

Правильный способ определить функцию, как тот, который вы описываете следующее:

CREATE FUNCTION X 
(
    -- Add the parameters for the function here 
    @a nvarchar(30), 
    @b nvarchar(30), 
    @c datetime, 
    @d datetime, 
    @e nvarchar(15), 
    @f nvarchar(4), 
    @g xml, 
    @h nvarchar(8), 
    @i nvarchar(80), 
    @j bit, 
    @k bit 
) 
RETURNS 
@output TABLE 
(
    -- Add the column definitions for the TABLE variable here 
    data nvarchar(250) 
) 
AS 
BEGIN 

    INSERT INTO @output (data) 
    VALUES (@a + @b)  

    RETURN 
END 
GO 

Учитывая приведенное выше определение, это:

select * from 
X('A','B','2014-01-01','2014-12-31',null,null,'<C><D>E</D></C>',null,null,1,0) 

дает следующий результат:

data 
---- 
AB 
+0

+1 Действительно глупая ошибка с моей стороны. Моя таблица внутри функции 'X' была вызвана' @ X', и я использовал 'INSERT INTO X' вместо' INSERT INTO @ X'. Первый (почти) выглядит как рекурсивный вызов и, следовательно ... – Drux