我有一个旧程序正在使用的表格,号角。在添加表时,它会产生某种映射表的字典。要创建此映射,列必须按顺序排列。 Clarion没有按名称读取它,但它确实按顺序和大小读取它。
我必须改变'表格中的一列。但是,该列需要通过函数计算:
ALTER FUNCTION uf_gifValue (@aID int)
RETURNS varchar(8)
WITH SCHEMABINDING
BEGIN
DECLARE @returnValue varchar(8)
SELECT @returnValue = ISNULL(C.columnName, '')
FROM
dbo.TableA AS A (this is old table)
LEFT JOIN dbo.TableB AS B
ON A.BId= B.BId
LEFT JOIN dbo.TableC AS C
ON B.CId= C.CId
WHERE
A.AId= @aID
RETURN ISNULL(@returnValue , '')
END
GO
受影响的表的架构类似于:
Table
{
column1
.
.
.
.
AffectedColumn
.
.
.
.
AId int identity(1,1) PRIMARY KEY}
首先,我尝试创建函数,创建临时表,删除旧表上的约束,并使用计算字段创建临时表。然后,我在临时表上引发了约束,并从旧表插入临时表。最后,我删除了旧表并将临时表重命名为旧表名。此方法不起作用,因为旧表由函数引用,无法删除。
接下来,我尝试创建一个不执行任何操作并返回'的功能。我用计算字段创建了一个临时表,并删除了旧表的约束。然后,我在临时表上引发了约束并从旧表插入临时表,删除旧表并将临时表重命名为旧表名。然后,我改变了函数,使其返回正确的值。 我对此方法的这个问题是,在引用时我无法更改计算列或函数。
我尝试的最后一件事是删除旧表上的约束,创建函数,添加计算列,并添加受影响的列之后的列以保留列顺序。然后,我删除了受影响列和新列之间的列,包括旧列。但是,这不起作用,因为我不能放弃AID'因为它在受影响的列之后。
请注意:列的值是从包含该列的表之外的其他表计算的。
有没有办法让我可以改变这个列来包含我的函数计算的值?
答案 0 :(得分:0)
为什么不重命名表并添加旧表命名的视图,返回所有内容,甚至可能是实时评估函数的结果。这种简单的视图是可编辑的。