我想用syscolumns中的'collength'值更新我创建的表('campo_sys')的列('n_tamanho')。
为此,我使用了这个程序:
CREATE PROCEDURE test()
DEFINE testecol smallint;
FOREACH cur1 WITH HOLD FOR
SELECT collength
INTO testecol
FROM syscolumns
update campo_sys
set campo_sys.n_tamanho = testecol;
END FOREACH
END PROCEDURE;
当比较collength和n_tamanho的值时,值不相同。可能有什么不对?
答案 0 :(得分:1)
发出声明时:
update campo_sys
set campo_sys.n_tamanho = testecol;
您正在campo_sys
更新所有行。据推测,syscolumns
的不同行具有不同的长度。但是,只记录最后一个 - 作为所有行的值。
答案 1 :(得分:0)
正如@ gordon-linoff所说,syscolumns
上的每条记录都会更新campo_sys
上的所有记录。
您需要告诉我们是否有办法在表格中唯一标识每条记录。
如果您要存储原始的 tabid ,我在之前的帖子和 colno 上建议您可以通过以下方式执行此操作:
UPDATE campo_sys col1
SET col1.n_tamanho = (
SELECT col2.collength
FROM syscolumns col2
WHERE col2.tabid = col1.ns_tabela
AND col2.colno = col1.ns_campo
);
如果您为 tabid 和 colno 保留了自己的ID,则可以执行以下操作:
UPDATE campo_sys col1
SET col1.n_tamanho = (
SELECT col2.collength
FROM syscolumns col2, tabela_sys tab1, systables tab2
WHERE col1.ns_tabela = tab1.ns_tabela
tab1.nome = tab2.tabname
AND col2.tabid = tab2.tabid
AND col2.colname = col1.nome
);
同样,你不是在讲述全貌,只需使用视图即可轻松完成。
请记住,我们在这里提供帮助,我们花时间这样做,不要像在另一个上那样编辑你的帖子。
将来,其他人可能正在寻找你所问的内容而且找不到答案,请记住,给出的答案可能不适合你,但可以帮助别人。我会恢复你的编辑。
如果这个或另一个答案不适合您要找的表格的模式和完整的要求。