2011-03-12 208 views
0

我想從Northwind創建T-SQL函數以返回新表,這將包含ProductID,ProductName,UnitsInStock和新列,指示是否存在比函數參數更多的UnitsInStock。TSQL:創建函數時遇到問題

:有2個商品的表。首先在股票10個單位,第二個有5所以與參數6函數返回:

1,產品1,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」我GOOGLE了,但我發現極大數不同的問題這樣。結果

我不知道是否在這裏使用CASE很好,我有一點Oracle背景和解碼功能,對於這些問題非常好。

回答

2

在你的表定義中,你應該先把列名,然後是數據類型。例如,

_UnitsInStock int, ... 

另外,NVARCHAR數據類型需要長度值。

_ProductName nvarchar(20) 
+0

哇,這是個瘸子錯誤後!非常感謝你:)我會盡快接受答案。 – Xorty 2011-03-12 00:18:19

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的類型來列名

+0

謝謝朋友,但鮑勃有點快:)) – Xorty 2011-03-12 00:19:04