Javascript SQL GUID在tojson查询中变为大写

Javascript SQL GUID在tojson查询中变为大写,javascript,sql-server,guid,Javascript,Sql Server,Guid,SQL Server以大写形式返回所有SQL_GUID数据类型。但是默认情况下我需要小写 我必须以Json格式返回数据查询以用于角度前端,并且大写Guid必须与小写的相同Guid进行比较,但此比较的结果为false SQL Server是否有办法在不使用内置SQL lower函数的情况下返回GUI?是的,您可以在不使用内置SQLlower函数的情况下执行此操作。这就是您如何将转换为varchar: cast(MyUniqueIdenfifierColumn as varchar(36)) 现在

SQL Server以大写形式返回所有SQL_GUID数据类型。但是默认情况下我需要小写

我必须以Json格式返回数据查询以用于角度前端,并且大写Guid必须与小写的相同Guid进行比较,但此比较的结果为false


SQL Server是否有办法在不使用内置SQL lower函数的情况下返回GUI?

是的,您可以在不使用内置SQL
lower
函数的情况下执行此操作。这就是您如何将
转换为
varchar

cast(MyUniqueIdenfifierColumn as varchar(36))
现在,假设您有一个
varchar(36)
作为
@input
,您可以这样做

declare output as varchar(36);
declare c as varchar(1);

select @output = '';

declare @i int;

select @i = 0;

while @i < len(@input)
begin
    select @i = @i + 1

    select @c = substring(@input, @i, 1);

    if @c = 'A' begin select @output = @output + 'a'; end;
    if @c = 'B' begin select @output = @output + 'b'; end;
    if @c = 'C' begin select @output = @output + 'c'; end;
    if @c = 'D' begin select @output = @output + 'd'; end;
    if @c = 'E' begin select @output = @output + 'e'; end;
    if @c = 'F' begin select @output = @output + 'f'; end;
    if @c = 'G' begin select @output = @output + 'g'; end;
    if @c = 'H' begin select @output = @output + 'h'; end;
    if @c = 'I' begin select @output = @output + 'i'; end;
    if @c = 'J' begin select @output = @output + 'j'; end;
    if @c = 'K' begin select @output = @output + 'k'; end;
    if @c = 'L' begin select @output = @output + 'l'; end;
    if @c = 'M' begin select @output = @output + 'm'; end;
    if @c = 'N' begin select @output = @output + 'n'; end;
    if @c = 'O' begin select @output = @output + 'o'; end;
    if @c = 'P' begin select @output = @output + 'p'; end;
    if @c = 'R' begin select @output = @output + 'r'; end;
    if @c = 'S' begin select @output = @output + 's'; end;
    if @c = 'T' begin select @output = @output + 't'; end;
    if @c = 'U' begin select @output = @output + 'u'; end;
    if @c = 'V' begin select @output = @output + 'v'; end;
    if @c = 'W' begin select @output = @output + 'w'; end;
    if @c = 'X' begin select @output = @output + 'x'; end;
    if @c = 'Y' begin select @output = @output + 'y'; end;
    if @c = 'Z' begin select @output = @output + 'z'; end;
    if len(@output) < @i begin select @output = @output + @c end;
end
将输出声明为varchar(36);
声明c为varchar(1);
选择@output='';
声明@i int;
选择@i=0;
而@i

当然,您可以在存储的
函数中使用它。但是,我不明白,当有一个库
函数
用于此目的时,您为什么要执行上述实现。如果您仅对内置SQL Server库有问题,还可以在客户端使用
toLowerCase
Javascript函数。

GUID基本上是一个16字节的二进制值。二进制值(或整数)中没有像大写或小写这样的项目。您可以使用ToUpper或ToLower使它们看起来像您想要的那样

在SQL Server中使用大写字母

SELECT UPPER ('8B94A1DA-1956-4D2E-A3A3-30CC52F589F9');
SELECT LOWER ('8B94A1DA-1956-4D2E-A3A3-30CC52F589F9');
在SQL Server中使用小写字母

SELECT UPPER ('8B94A1DA-1956-4D2E-A3A3-30CC52F589F9');
SELECT LOWER ('8B94A1DA-1956-4D2E-A3A3-30CC52F589F9');
在有角的情况下改为大写

'8B94A1DA-1956-4D2E-A3A3-30CC52F589F9'.toUpperCase( );
小写

'8B94A1DA-1956-4D2E-A3A3-30CC52F589F9'.toLowerCase( );

不是直接的答案,但可能考虑将UUID存储为SQL Server数据库中的二进制文件。除了节省一些存储空间外,您还可以直接将该二进制文件与前端的二进制文件进行比较。GUID在SQL Server中是它们自己的数据类型,
uniqueidentifier
,如果您尝试
选择CONVERT(uniqueidentifier,'f6af441f-bea8-4760-86ab-91464e55b091',它们将始终使用大写字母
它将以大写字母显示。如果需要小写字母,则必须将该值视为
varchar
,并使用
lower
。我不建议,建议将值存储为
varchar
;在处理应用程序时只需传递小写值。您能详细说明为什么不想使用
LOWER
。。。而这不是数据库应该关心的事情。如果它是一个GUID,那么将它作为GUID发送回去,让js知道需要对它做什么来进行比较。如果是约会,我们就不会有这样的讨论。。。我们会让SQL Server发回一个日期,然后使用Moment或js日期“格式化”它来进行比较,而不是SQL Server。。。。那么为什么GUID/UUID应该有所不同呢?@MartinSmith我所有的逻辑都在sp和函数中,最后结果以JSON格式返回,我将其交付给angular前端,如果我想使用lower,我必须做很多更改,另一方面,我认为如果我在最终选择查询中的所有guid字段之前以angular的形式写得更低,这不是一个干净的cod。如果我在代码库中看到这一点,这将是一个很大的危险信号,即负责的开发人员不知道他们在做什么。在任何情况下,编写自己的代码来模拟
LOWER
都比只使用
LOWER
句号要好。那么实际的实现也相当冗长和低效;使用
WHILE
。建议使用
函数
,该函数必须是多行标量/表值函数(两者的性能都很差)。多个
IF
语句(一个
CASE
表达式会更好)。试图将
uniqueidentifier
视为
varchar
SUBSTRING
uniqueidentifier
无效)。事实上,您已经有效地重写了
LOWER
函数,但解决方案要慢得多。你需要看看他们不想使用
LOWER
,的根本原因-我认为这不是因为他们对函数有一种非理性的厌恶,而是出于其他原因-比如不想更改现有代码。@MartinSmith问题特别提出:“有没有办法让SQL Server重新启动