我对在存储过程中使用计算列问题。
我已经在我的表中的某些字段计算列。
现在,我要创建存储过程,而这个SP应该阅读计算列中的值进行一些操作。
我已经创建我的程序有一些光标,但是当我试图执行它,我有一个计算列数据类型ralted错误(因为你知道有计算列没有数据类型),所以我怎么可以处理。
计算列确实有,这只是含蓄地确定的数据类型(如果是这样的短语),从数据的基础上的。所以,如果你有
ColA int
ColB int
和基于可乐+ COLB计算列,计算列也将是一个int。所以,你需要(1)找出你的计算列的forumla的结果的数据类型,(2)修改代码以正确地考虑该数据类型,以及(3)像米奇小麦说,把它改写为不使用光标。
您可以使用SQL_VARIANT_PROPERTY()
来确定计算列的基本数据类型:
SELECT TOP 1 SQL_VARIANT_PROPERTY(ComputedColumnName, 'BaseType') FROM TableName
或者,如果你喜欢:
SELECT DISTINCT SQL_VARIANT_PROPERTY(ComputedColumnName, 'BaseType') FROM TableName
我的理解应该是这样的,一旦这样你就可以指定正确的类型参数。但是,如果你需要,你也可以使用该功能在您的脚本。
UPDATE
正如马丁已经正确地指出,如果表是空的上述方法将无法正常工作。
你可以添加一些乱排和应用方法,或使用马丁,其作品无论数据存在建议的替代方法:
select t.name,t.precision,t.scale,t.max_length, t.is_nullable
from sys.computed_columns c
join sys.types t on t.user_type_id = c.user_type_id
where c.name='col_name' and c.object_id=object_id('schema_name.table_name')