2017-06-13 42 views
0

MS SQL Serverでは、create tableステートメントに計算カラムを定義することができます。SAS - 計算列/変数をProc SQLテーブルに追加する

CREATE TABLE dbo.Products 
( 
    ProductID int 
    , QtyAvailable smallint 
    , UnitPrice money 
    , InventoryValue AS QtyAvailable * UnitPrice 
); 

SAS proc sqlで使用できる同等のオプションはありますか?

以下は、構文エラーをスロー:

proc sql; 
CREATE TABLE work.Products 
( 
    ProductID num 
    ,QtyAvailable num 
    ,UnitPrice num format euro8.2 
    , InventoryValue AS QtyAvailable * UnitPrice 
); 
quit; 

答えて

1

SASの物理テーブルに計算カラムを定義することは不可能です。

169 set productid=1, qtyavailable=2,unitprice=3, inventoryvalue=4; 
WARNING: Cannot provide InventoryValue with a value because it references a derived 
column that can't be inserted into. 

:InventoryValueに値を追加しようとし

proc sql; 
create table work.products_base 
( 
    ProductID num 
    ,QtyAvailable num 
    ,UnitPrice num format euro8.2 
); 
CREATE view work.Products as 
    select 
    ProductID 
    ,QtyAvailable 
    ,UnitPrice 
    ,QtyAvailable * UnitPrice as InventoryValue 
    from work.products_base; 

insert into work.products 
    set productid=1, qtyavailable=2,unitprice=3; 

は警告をスロー:次のように代わり、1は例えば、データの物理的なベーステーブル、および計算列のビューを作成する必要がありますもう1つのアプローチは、1つの物理テーブルを意味する制約を使用することですが、開発者は正しい値が実際にロードされるようにする必要があります(計算されず、物理ディスクスペースを占有します)。

proc sql; drop table work.products; 
create table work.products_base 
( 
    ProductID num 
    ,QtyAvailable num 
    ,UnitPrice num format euro8.2 
    ,InventoryValue num 
    ,constraint InventoryValue check(InventoryValue = QtyAvailable * UnitPrice) 
); 
insert into work.products_base set qtyavailable=2,unitprice=2,inventoryvalue=4; 
insert into work.products_base set qtyavailable=2,unitprice=2,inventoryvalue=2; 

二insert文がエラーをスローします。もちろん

ERROR: Add/Update failed for data set WORK.PRODUCTS_BASE because data value(s) do not comply 
     with integrity constraint InventoryValue. 

- あなたが実際にSQL Serverで、あなたのテーブルを作成している場合、あなたはあなたの計算列を作成するには、構文パススルーを使用することができます。..

+0

私はすでに行っていますが、どちらも動作しません:(選択されたステートメントでは動作しますが空のテーブルは作成しません) – kristof

+0

お詫び - 私は間違っています - 2分、見てみる –

+0

ありがとう@allanメタデータに関するSASテーブルを作成する場合は、インベントリ値 – kristof

関連する問題