1

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

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

但这失败了

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

有谁知道这是否可以做到?

4

1 回答 1

2

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

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>

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

于 2012-08-27T18:49:15.747 回答