TSQL: проблема с созданием функции - PullRequest
0 голосов
/ 12 марта 2011

Я пытаюсь создать функцию T-SQL из Northwind для возврата новой таблицы, которая будет содержать ProductID, ProductName, UnitsInStock и новый столбец, указывающий, больше ли UnitsInStock, чем параметр функции.

Пример: Давайте иметь таблицу из 2 продуктов.Первая имеет 10 единиц на складе, вторая имеет 5. Поэтому функция с параметром 6 должна вернуть:

1, Product1, 10, YES

2, Product2, 5, NO

Вот мой неработающий программный софар: (

CREATE FUNCTION dbo.ProductsReorder
    (
    @minValue int
    )
RETURNS  @tabvar TABLE (int _ProductID, nvarchar _ProductName, int _UnitsInStock, nvarchar _Reorder) 
AS
    BEGIN
        INSERT INTO @tabvar 
           SELECT ProductID, ProductName, UnitsInStock, Reorder =
           CASE
            WHEN UnitsInStock > @minValue THEN "YES"
            ELSE "NO"
           END 
            FROM Products
        RETURN
    END

T-SQL дает мне этот не очень полезный ответ: " Столбец, параметр или переменная # 1: не удается найти тип данных _ProductID ". Я погуглил, но нашел для такого результата несколько разных проблем.

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

Ответы [ 2 ]

3 голосов
/ 12 марта 2011

это простой ответ - особенно если вы из оракула

неверное определение таблицы в вашей функции.

Заменить:

@tabvar TABLE (int _ProductID, nvarchar _ProductName, int _UnitsInStock, nvarchar _Reorder)

с чем-то вроде

@tabvar TABLE ([_ProductID] INT, [_ProductName] NVARCHAR(50), [_UnitsInStrock] INT, [_Reorder] NVARCHAR(50))

На сервере sql типы идут после имен столбцов

2 голосов
/ 12 марта 2011

В определении таблицы вы должны сначала указать имя столбца, а затем тип данных. Например

_UnitsInStock int, ...

также, тип данных NVARCHAR требует значения длины.

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