我正在尝试使用c#winforms在会计应用中做一个平衡列,我只是为了自己使用它,就像这个列的公式一样:
balance[i] = debit[i] - credit[i] + balance[i-1]
所以,我认为计算列是最佳解决方案。我正在使用Visual Studio 2013社区和SQL Server,我试图在CREATE TABLE
脚本的“表视图”中执行此操作:
CREATE TABLE [dbo].[CONTAT1]
(
[NASIENTO] INT IDENTITY (1, 1) NOT NULL,
[FECHA] DATE NOT NULL,
[CONCEPTO] NVARCHAR (MAX) NOT NULL,
[DEBIT] INT DEFAULT ((0)) NOT NULL,
[CREDIT] INT DEFAULT ((0)) NOT NULL,
[BALANCE] AS ([DEBIT]-[CREDIT] + lag([BALANCE], 1, 0)),
[FACTURA] INT NULL,
[RECIBO] INT NULL,
PRIMARY KEY CLUSTERED ([NASIENTO] ASC)
);
我指定了默认的滞后参数,所以在第一个记录中,函数滞后只是加0(哦,我已经翻译了所谓的行名,所以任何人都可以按照这个问题)。当我更新表时它不起作用并给出以下消息:
Dropping unnamed constraint on [dbo].[CONTAT1]...
Dropping unnamed constraint on [dbo].[CONTAT1]...
Starting rebuilding table [dbo].[CONTAT1]...
(116,1): SQL72014: .Net SqlClient Data Provider: Msg 10753, Level 15, State 1, Line 13 The function 'lag' must have an OVER clause.
(104,0): SQL72045: Script execution error. The executed script:
BEGIN TRANSACTION;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET XACT_ABORT ON;
CREATE TABLE [dbo].[tmp_ms_xx_CONTAT1] (
[NASIENTO] INT IDENTITY (1, 1) NOT NULL,
[FECHA] DATE NOT NULL,
[CONCEPTO] NVARCHAR (MAX) NOT NULL,
[DEBIT] INT DEFAULT ((0)) NOT NULL,
[CREDIT] INT DEFAULT ((0)) NOT NULL,
[BALANCE] AS ([DEBIT] - [CREDIT] + lag([BALANCE], 1, 0)),
[FACTURA] INT NULL,
[RECIBO] INT NULL,
PRIMARY KEY CLUSTERED ([NASIENTO] ASC)
);
IF EXISTS (SELECT TOP 1 1
FROM [dbo].[CONTAT1])
BEGIN
SET IDENTITY_INSERT [dbo].[tmp_ms_xx_CONTAT1] ON;
INSERT INTO [dbo].[tmp_ms_xx_CONTAT1] ([NASIENTO], [FECHA], [CONCEPTO], [DEBIT], [CREDIT], [FACTURA], [RECIBO])
SELECT [NASIENTO],
[FECHA],
[CONCEPTO],
[DEBIT],
[CREDIT],
[FACTURA],
[RECIB
An error occurred while the batch was being executed.
我最后一次使用SQL就像2000年代早期一样,所以我不确定为什么不工作......老实说,这批产品正在扼杀我。
我已经搜索了滞后函数,对我来说似乎是正确的,因为表有一个主键,如果我只是尝试没有滞后函数(仅使用[BALANCE] AS ([DEBIT]-[CREDIT])
)它完美地工作,我想我有不需要指定顺序或其他东西,所以我想再次问题是滞后函数。
问题是:
滞后函数可以与CREATE TABLE
一起使用,对吗?如果没有,我应该在OnLoad事件中创建一个查询来创建该列吗?
有没有其他方法可以访问上一条记录?是的,我可以通过DataSet以非常简单的foreach来做,但我不想创建...你怎么用英语称它?差距?只是数据库和应用程序中的不同信息,以及重复的查询和什么不是......所以我认为数据库自动管理它会更好:P,对吧?
答案 0 :(得分:1)
SQL中没有以前的记录 - 表没有订单。
会计标准 - 在大多数司法管辖区甚至法律上非常要求 - 是在表中记录变更和新值,以及运行编号(每个帐户)。