2016-11-04 4 views
1

計算列を永続化したいが、TRY_PARSEは私の関数を非決定的にする。それで何かできますか?代替品はありますか?代わりにTRY_PARSE関数が非決定性になる

CREATE FUNCTION [dbo].[F] 
(
    @input nvarchar(100) 
) 
RETURNS int 
WITH SCHEMABINDING 
AS 
BEGIN 
    return TRY_PARSE(@input as INT) 
END 


SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].[F]'), 'IsDeterministic') 
+1

は 'TRY_PARSE'は常に非決定的であるとの関数で、それのいずれかの使用は、それが非決定的なレンダリングします。あなたが何をしたいのかに応じて回避策があるかもしれません(もちろん 'TRY_PARSE'を使用しないことが最も明白ですが)、それはあなたのコンテキストに依存します。たとえば、CONVERTは決定的ですが、それは必要な変換を提供しない可能性があります。独自の変換をCLR関数として実装し、確定的にマークすることもできます。しかし、何のために機能はありますか? T-SQLの関数は、通常考えられるほどの半分ではありません。 –

答えて

1

使用TRY_CONVERT

CREATE FUNCTION [dbo].[F] 
(
    @input nvarchar(100) 
) 
RETURNS int 
WITH SCHEMABINDING 
AS 
BEGIN 
    return TRY_CONVERT(INT,@input) 
END 


SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].[F]'), 'IsDeterministic') 
関連する問題