Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 函数返回字符串并更改编码_Sql_Sql Server_Tsql_Character Encoding - Fatal编程技术网

Sql 函数返回字符串并更改编码

Sql 函数返回字符串并更改编码,sql,sql-server,tsql,character-encoding,Sql,Sql Server,Tsql,Character Encoding,我的数据库表如下所示: ID | Name | Name_Plain 1 | Łódź | 我想要实现的是,每当这个表中有insert或update时,我希望SQL能够自动将“Name”转换为文本,而不使用波兰语特殊字符,并将其写入“Name\u Plan”。因此,上述示例中的结果应为“Lodz” 我创建了一个触发器,现在正在尝试编写一个用户定义的函数,该函数将输入文本转换为输出文本 ALTER FUNCTION [dbo].[usunogon

我的数据库表如下所示:

ID    | Name          | Name_Plain
1     | Łódź          |
我想要实现的是,每当这个表中有insert或update时,我希望SQL能够自动将“Name”转换为文本,而不使用波兰语特殊字符,并将其写入“Name\u Plan”。因此,上述示例中的结果应为“Lodz”

我创建了一个触发器,现在正在尝试编写一个用户定义的函数,该函数将输入文本转换为输出文本

ALTER FUNCTION [dbo].[usunogonki] (@t nvarchar(50))  RETURNS nvarchar(50)
AS 
BEGIN
    return @t
END;
问题是。。上面的函数几乎可以返回我想要的文本!它返回“Lódz”。我知道这与编码有关,因为Ł被转换成L,而ó保持不变。我想从这个函数中得到的是我想要的,所以现在它应该返回我不变的文本

我尝试了一些技巧,比如

return (@t COLLATE sql_polish_cp1250_ci_as)
但是没有成功。 我缺少什么?

试试这个:

DROP TABLE IF EXISTS #TEST;

CREATE TABLE #TEST
(
    [ID] INT IDENTITY(1,1)
   ,[Name] NVARCHAR(12)
   ,Name_PLain AS CAST([Name] AS VARCHAR(12)) COLLATE SQL_Latin1_General_CP1253_CI_AI 
);


INSERT INTO #TEST ([Name])
VALUES (N'Łódź')

SELECT *
FROM #TEST

创建一个计算列,如果需要,可以将其具体化。或者基本上,坚持你的例子:

return (@t COLLATE SQL_Latin1_General_CP1253_CI_AI)

谢谢使用VARCHAR而不是NVARCHAR的作业是什么:非常感谢!