【问题标题】:Stored Procedure to update a column values with a column of syscolumns使用 syscolumns 列更新列值的存储过程
【发布时间】:2016-02-10 00:55:29
【问题描述】:

我想用来自 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 的值时,值不一样。有什么问题?

【问题讨论】:

  • 给出列定义和两个不同值的具体示例可能会有所帮助
  • 执行程序后,我得到了不同的 collength 和 n_tamanho 值。例如,对于同一条记录,n_tamanho=20 和 collength=2048
  • 听起来你得到了 varchar 字段的潜在最大长度和当前最长值之间的差异,尽管我对 Informix 不够熟悉,无法确定

标签: sql stored-procedures informix


【解决方案1】:

当您发出声明时:

update campo_sys 
    set campo_sys.n_tamanho = testecol;

您正在更新campo_sys 中的所有 行。据推测,syscolumns 的不同行有不同的长度。但是,只会记录最后一个 -- 作为所有行的值。

【讨论】:

    【解决方案2】:

    正如@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
    );
    

    再一次,您不是在讲述整个画面,您只需使用视图就可以轻松做到这一点。

    请记住,我们是来提供帮助的,而且我们花了很多时间这样做,不要像在其他帖子上那样编辑您的帖子。

    将来其他人可能会寻找您提出的问题但找不到答案,请记住,给出的答案可能不适合您,但可以帮助其他人。我会恢复你的编辑。

    如果这个或另一个答案不符合您要查找的内容,请发布您的表的架构和完整的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多