2011-12-19 18 views
1

sql(スクリプティング)を初めて使用しました。単一のCRUDコマンドは問題ありませんが、同じ選択されたテーブルの結果を使用して計算された値でテーブルを更新するストアドプロシージャを作成しようとしています。結果セットを使用して計算値で選択したテーブルと同じテーブルを更新します

表には、各従業員の合計休暇時間と昨年の残りの勤務時間の値が記載されています。

私が達成しようとするのは、今年の新しい時間を残りの時間に追加することです。 1つのキャッチがあります。新しい時間列は全時間で、残りの時間は100nsである 'ティック'の値です。

この計算の参照と同じテーブルを使用してテーブルを更新するにはどうすればよいですか?

example table: 
employee, vacation, remainingvacation 

new value of remainigvacation = vacation(in hours) * 60(minutes) * 60(seconds) * 10^9 (to convert to ticks) + remainingvacation (in ticks) 

答えて

3
UPDATE 
    myTable 
SET 
    remainingvacation = (vacation * 60 * 60 * POWER(10, 9)) + remainingvacation 

その後、JOINSとWHERE句...

UPDATE 
    myTable 
SET 
    remainingvacation = (vacation * 60 * 60 * POWER(10, 9)) + remainingvacation 
FROM 
    myTable 
INNER JOIN 
    yourTable 
    ON myTable.id = yourTable.id 
WHERE 
    yourTable.value = 'Egyptian Holidays' 
+0

エラーなどの後に同じ操作を行うことができます。算術オーバーフローエラーがデータ型intに式を変換します。 これは、残りのベーション列のタイプがbigint –

+0

で、パワー関数を削除して正常な数を使用すると発生します。 –

+0

@LuukKrijnen: 'vacation'を' CAST(vacation AS bigint) 'または' 60'sのいずれかを 'CAST(60 AS bigint) 'に置き換えます。 –

関連する問題