SQL-92(Filemaker):如何更新序列号列表?

时间:2015-12-24 11:14:46

标签: sql filemaker

我需要在其中一个SortID发生变化之后,使用SQL-92重新分配所有SortID,从1到MAX(SortID)从表Beleg的记录子集开始(例如从444到444.1)。我尝试了几种方法(例如SET @a:= 0; UPDATE表SET字段= @ a:= @ a + 1 WHERE无论='无论' ORDER BY field2),但它没有'因为这些解决方案都需要一种特殊的SQL,比如SQLServer或Oracle等。

我使用的SQL是SQL-92,在FileMaker中实现(INSERT和UPDATE虽然可用,但没什么特别的。)

感谢任何提示!

加里

2 个答案:

答案 0 :(得分:0)

据我所知,SQL-92是标准而非语言。所以你可以说你使用的是T-SQL,它主要是SQL-92兼容的,但你不能说我在SQL-92中编写SQL Server。这同样适用于FileMaker。

我想您正在尝试通过ODBC更新表? Update语句看起来没问题,但是如果FileMaker SQL没有变量(我不确定在查询中使用变量会给你预期的结果,我想你会在每一行中将SortId设置为1)。您正在考虑在TSQL中使用带有row()的Window函数,但我认为此功能不可用。

最简单的解决方案是使用FileMaker,重置列的编号实际上是一项微不足道的任务,需要几秒钟。你需要帮助吗?

编辑:

我指的是TSQL函数rank()和row_number(),TSQL中没有row()函数

答案 1 :(得分:0)

我终于从Ziggy Crueltyfree Zeitgeister the Database Administrators copy of my question获得了答案。

他建议使用临时表将结果分解为多个步骤来存储结果:

CREATE TABLE sorting (sid numeric(10,10), rn int);

INSERT INTO sorting (sid, rn)
SELECT SortID, RecordNumber FROM Beleg
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210
ORDER BY SortID;

UPDATE Beleg SET SortID = (SELECT rn FROM sorting WHERE sid=Beleg.SortID)
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210;

DROP TABLE sorting;

当然!我只是将表定义保存在Filemaker中(让文件制作者以这种方式完成类型强制),并使用我的函数填充和删除它:RenumberSortID()。