簡體   English   中英

如何在存儲過程中定義計算列

[英]How can I define a computed column in a stored procedure

我對在存儲過程中使用計算列有疑問。

我的表中已經有一些字段作為計算列。

現在,我必須創建存儲過程,並且此SP應該讀取計算列中的值以進行一些操作。

我已經使用一些游標創建了過程,但是當我嘗試執行它時,由於計算列的數據類型出現錯誤(由於您知道計算列沒有數據類型),因此如何進行處理。

計算列的確具有數據類型,它只是根據數據所基於的隱式確定的(如果是這樣的話)。 所以如果你有

ColA int
ColB int 

以及基於ColA + ColB的計算列,該計算列也將是一個int。 因此,您需要(1)找出計算列的論壇結果的數據類型,(2)修改代碼以正確考慮該數據類型,以及(3)如Mitch Wheat所說,將其重寫為不使用光標。

您可以使用SQL_VARIANT_PROPERTY()確定計算列的基礎數據類型:

SELECT TOP 1 SQL_VARIANT_PROPERTY(ComputedColumnName, 'BaseType') FROM TableName

或者,如果您喜歡:

SELECT DISTINCT SQL_VARIANT_PROPERTY(ComputedColumnName, 'BaseType') FROM TableName

我知道應該執行一次,這樣您才能指定正確的參數類型。 但是,如果需要,也可以在腳本中使用該函數。


UPDATE

正如Martin正確指出的,如果表為空,則上述方法將不起作用。

您可以添加任意行並應用該方法,也可以使用Martin建議的替代方法,無論數據存在與否,該方法都可以起作用:

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM