我如何定义存储过程的计算列

问题描述 投票:0回答:2

我对在存储过程中使用计算列问题。

我已经在我的表中的某些字段计算列。

现在,我要创建存储过程,而这个SP应该阅读计算列中的值进行一些操作。

我已经创建我的程序有一些光标,但是当我试图执行它,我有一个计算列数据类型ralted错误(因为你知道有计算列没有数据类型),所以我怎么可以处理。

sql sql-server sql-server-2005 tsql
2个回答
4
投票

计算列确实有,这只是含蓄地确定的数据类型(如果是这样的短语),从数据的基础上的。所以,如果你有

ColA int
ColB int 

和基于可乐+ COLB计算列,计算列也将是一个int。所以,你需要(1)找出你的计算列的forumla的结果的数据类型,(2)修改代码以正确地考虑该数据类型,以及(3)像米奇小麦说,把它改写为不使用光标。


1
投票

您可以使用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')
© www.soinside.com 2019 - 2024. All rights reserved.