私はこれに似た構造を持っています:
Company
(
CompanyID
CompanyLastTransactionNo
)
Transaction
(
TransactionID
CompanyID
CompanyTransactionNo
TransactionAmount
)
だから私は次のようなことをする手順があります:
INSERT INTO Transaction
(CompanyID, CompanyTransactionNo, TransactionAmount)
SELECT
CompanyID,
fn_GetNextCompanyTrancationNo(CompanyID),
TransactionAmount
FROM
LoadingTable
CREATE FUNCTION [dbo].[fn_GetNextCompanyTrancationNo]
(
@CompanyID CHAR(10)
)
RETURNS INT
AS
BEGIN
DECLARE @trxno int
DECLARE @trxnoNew int
SELECT @trxno = CompanyLastTransactionNo
FROM dbo.Company
WHERE ID = @CompanyID;
SET @trxnoNew = @trxno + 1;
UPDATE dbo.Company
SET CompanyLastTransactionNo = @trxnoNew
WHERE CompanyID = @CompanyID;
RETURN @trxno
END
コンパイルすると、次のようになります。
メッセージ443、レベル16、状態15、プロシージャfns_fn_GetNextCompanyTrancationNo、19行目関数内での副作用演算子「UPDATE」の使用が無効です。
DUH。それを完全に忘れました。
これが私の質問です。これと同様に、ストアドプロシージャをインライン関数として使用する方法はありますか?たぶん、これはすべて一緒に悪いアプローチですか?
私は自分が持っているテーブルで立ち往生しているのでしょうか、それとも次の番号を取得するためにシーケンスを使用するのでしょうか?