我正在尝试从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背景和解码功能对于这些问题很有用。
答案 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)