2012-06-06 23 views
3

我有一個現有的C#CLR運行時功能,我正在使用SQL Server 2012.我想設置此功能上的IsDeterministicSCHEMABINDING選項,以便我可以使用它來保留計算在表中的列。爲CLR功能設置SCHEMABINDING和IsDeterministic

下面是ALTER語句:

ALTER FUNCTION [dbo].[authorityFromURI](@URI [nvarchar](4000)) 
RETURNS [nvarchar](4000) WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME [KDPSqlServerProject].[UserDefinedFunctions].[authorityFromURI] 

如何把這個ALTER語句來修改設置這些選項?

回答

4

你要設定的功能代碼本身內IsDeterminstic屬性,如

[SqlFunction(IsDeterministic = true, IsPrecise = true [...])] 

爲了讓SCHEMABINDING:

RETURNS NVARCHAR(4000) 
WITH SCHEMABINDING, EXECUTE AS CALLER 

這麼說,我還沒有與持久性測試,這些選項一起...

+0

我將我的c#代碼更改爲: 公共部分類UserDefinedFunctions { {Microsoft.SqlSe rver.Server.SqlFunction(IsDeterministic = true,IsPrecise = true)] public static SqlString authorityFromURI(SqlString URI) { {0}請注意,我不需要設置「with schemabinding」 – JonnyBoats

+0

@JonnyBoats和Aaron:1)SCHEMABINDING不是SQLCLR函數的有效選項,2)雖然在這種特殊情況下它看起來不是問題(即獲得URI的權威性),應該注意的是,如果它們實際上只應該設置「IsDeterministic」,並且可以選擇「IsPrecise」爲「true」。如果你將它們設置爲「true」,但實際上它們不是,你會看到一些「奇怪」的行爲。 –