正在尝试访问 SQL 服务器中的先前记录
Trying to access previous record in SQL Server
我正在尝试使用 c# winforms 在会计应用程序中做一个余额列,我这样做只是为了自己使用,就像这个列的公式:
balance[i] = debit[i] - credit[i] + balance[i-1]
所以,我认为计算列是最佳解决方案。我正在使用 Visual Studio 2013 社区和 SQL 服务器,我尝试在 CREATE TABLE
脚本的 "table view" 中执行此操作:
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(哦,我已经翻译了所谓的行名称,所以任何人都可以理解这个问题)。当我更新 table 它不起作用并给出以下消息:
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 年代初期,所以我不确定为什么不起作用...老实说,批处理的东西快要死了。
我已经搜索了滞后函数并且对我来说似乎是正确的,并且由于 table 有一个主键并且如果我只是在没有滞后函数的情况下尝试它(仅使用 [BALANCE] AS ([DEBIT]-[CREDIT])
)它有效完美,我想我不需要指定顺序或其他东西,所以我再次认为问题是滞后函数。
问题是:
滞后函数可以和CREATE TABLE
一起使用,对吧?如果没有,我是否应该在 OnLoad 事件的表单中进行查询以创建该列?
有没有其他方法可以访问以前的记录?是的,我可以通过 DataSet 使用一个非常简单的 foreach 来完成,但我不想创建...用英语怎么称呼它?差距?只是数据库和应用程序中的信息不同,重复查询等等...所以我认为数据库自动管理它会更好:P,对吗?
SQL中没有以前的记录 - table没有顺序。
会计标准——在大多数司法管辖区甚至是法律上的要求——是在 table 中记录更改和新值,以及 运行 数字(每个帐户)。
我正在尝试使用 c# winforms 在会计应用程序中做一个余额列,我这样做只是为了自己使用,就像这个列的公式:
balance[i] = debit[i] - credit[i] + balance[i-1]
所以,我认为计算列是最佳解决方案。我正在使用 Visual Studio 2013 社区和 SQL 服务器,我尝试在 CREATE TABLE
脚本的 "table view" 中执行此操作:
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(哦,我已经翻译了所谓的行名称,所以任何人都可以理解这个问题)。当我更新 table 它不起作用并给出以下消息:
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 年代初期,所以我不确定为什么不起作用...老实说,批处理的东西快要死了。
我已经搜索了滞后函数并且对我来说似乎是正确的,并且由于 table 有一个主键并且如果我只是在没有滞后函数的情况下尝试它(仅使用 [BALANCE] AS ([DEBIT]-[CREDIT])
)它有效完美,我想我不需要指定顺序或其他东西,所以我再次认为问题是滞后函数。
问题是:
滞后函数可以和CREATE TABLE
一起使用,对吧?如果没有,我是否应该在 OnLoad 事件的表单中进行查询以创建该列?
有没有其他方法可以访问以前的记录?是的,我可以通过 DataSet 使用一个非常简单的 foreach 来完成,但我不想创建...用英语怎么称呼它?差距?只是数据库和应用程序中的信息不同,重复查询等等...所以我认为数据库自动管理它会更好:P,对吗?
SQL中没有以前的记录 - table没有顺序。
会计标准——在大多数司法管辖区甚至是法律上的要求——是在 table 中记录更改和新值,以及 运行 数字(每个帐户)。