【发布时间】:2013-02-07 12:38:56
【问题描述】:
我有一个类似这样的结构:
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”。
呃。完全忘记了。
所以这是我的问题,有没有办法将存储过程用作内联函数,类似于这个?也许这是一个不好的方法?
我有点卡在我的表上,或者我会使用一个序列来获取下一个数字?
【问题讨论】:
-
您提到序列:您使用的是 SQL Server 2012 吗?
-
不,使用 2008 R2。是的,我知道序列要到 2012 年才可用。但我应该澄清一下。现在是 2008R2。
标签: sql-server tsql stored-procedures sql-server-2008-r2 user-defined-functions