为自定义数据类型创建隐式转换规则

Create implicit conversion rule for custom data type

我正在编写大量 SQL 来为我们的客户输出 .xml 文件。他们更喜欢在 BIT 列中使用 "Y" 或 "N",而不是 1 或 0。我们到处都有很多 BIT 列,我需要比我多写 CASE WHEN 1 THEN 'Y' ELSE 'N' END 次吃过热饭,来转换数据。

从某种意义上说,这很好,我应该继续做下去,不要再抱怨了,但我忍不住想知道……如果我从 CHAR(1) 基创建自定义数据类型,它只允许"Y" 或 "N" 值,我能否以某种方式制定隐式转换规则,以便机器可靠地为我进行转换 - 将 1 转换为 "Y" 并将 0 转换为 "N"每次?

我意识到还有其他可能性可以实现同样的事情(例如使用 .xsd 在事件后转换为 Y/N 而不是 1/0),但我'我有兴趣添加自定义类型和规则 - 是否可能并且是否明智?

据我所知,您无法接触到这些内部流程。

根据你的问题,我认为你正在编写一个 XML 文件,所以我假设你希望 XML 文件中的书面信件具有更好的人类可读性?如果是这样,最好尝试说服您的员工 01.

没有任何问题

但您可能会节省一些输入时间:

 CREATE FUNCTION dbo.WriteBit(@b BIT) RETURNS VARCHAR(1)
 AS BEGIN
    RETURN
    (
    SELECT CASE @b WHEN 1 THEN 'Y'
                   WHEN 0 THEN 'N'
                   ELSE NULL END
    ); 
 END;
 GO

DECLARE @mockup TABLE(SomeInt INT, SomeBit BIT);
INSERT INTO @mockup VALUES
 (0,0)
,(1,1);

SELECT SomeInt,dbo.WriteBit(SomeBit) AS SomeBitChar FROM @mockup;

SELECT SomeInt,dbo.WriteBit(SomeBit) AS SomeBitChar 
FROM @mockup
FOR XML PATH('test'),ROOT('root');
GO

DROP FUNCTION dbo.WriteBit;
GO

结果在XML

<root>
  <test>
    <SomeInt>0</SomeInt>
    <SomeBitChar>N</SomeBitChar>
  </test>
  <test>
    <SomeInt>1</SomeInt>
    <SomeBitChar>Y</SomeBitChar>
  </test>
</root>