整理作为函数参数

时间:2012-08-27 17:49:16

标签: sql-server sql-server-2008 entity-framework sql-server-2005

我有一个应该以任何语言存储数据的数据库,会有一个列告诉我它是哪个语言环境,因此我不能依赖数据库排序规则,并且必须在运行时指定排序规则查询。

我还有一个问题,我想使用EF进行数据访问,因为我们知道使用EF无法在运行时指定排序规则。我正在考虑创建一个将collat​​ion作为参数的sql函数,并在所有Linq查询中应用该函数。

但是失败了

CREATE FUNCTION fn_Compare
(   
    @TextValue nvarchar(max),
    @Culture varchar(10)
)
RETURNS  nvarchar(max)
AS
BEGIN
    RETURN @TextValue COLLATE @Culture
END
GO

有人知道是否可以这样做吗?

1 个答案:

答案 0 :(得分:1)

你不能这样做。函数返回的排序规则需要在所有返回值中保持一致。例如,以下内容会生成错误:

create function testfn (@test varchar(100), @i int)
returns varchar(100)
as
begin
    return(case when @i = 0 then @test collate SQL_Latin1_General_CP1_CS_AS
              else @test collate SQL_Latin1_General_CP1_CI_AS
         end)
end;

错误是由于排序规则冲突造成的。

你可以做的是使用:

alter database collate <whatever>

或者,或者,使用所需的排序规则创建一个新的工作数据库。