TSQL:创建函数时出现问题

时间:2011-03-12 00:12:52

标签: sql-server tsql

我正在尝试从Northwind创建T-SQL函数以返回新表,它将包含ProductID,ProductName,UnitsInStock和新列,指示是否有更多的UnitsInStock而不是函数参数。

示例:我们有2个产品的表格。首先有10个库存,第二个有5.所以参数6的功能应该返回:

1,Product1,10,YES

2,产品2,5,NO

这是我的非工作代码sofar :(

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 个答案:

答案 0 :(得分:3)

这是一个简单的答案 - 特别是因为你来自oracle

你的函数中的表定义是错误的方法。

替换:

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

类似

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

在sql server中,类型位于列名

之后

答案 1 :(得分:2)

在表定义中,应首先放置列名,然后放入数据类型。例如

_UnitsInStock int, ...

另外,NVARCHAR数据类型需要一个长度值。

_ProductName nvarchar(20)