gpt4 book ai didi

c# - 在 SQL Server 中使用 sql_variant 而不是 varchar 有什么好处吗?

转载 作者:可可西里 更新时间:2023-11-01 07:55:08 26 4
gpt4 key购买 nike

我目前有一个数据库表设置如下(EAV - 业务原因有效):

  • Id - 整数 (PK)
  • 键 - 唯一,varchar(15)
  • 值 - varchar(1000)

这允许我将混合值作为键/值对添加到我的数据库中。例如:

1   | 'Some Text'      | 'Hello World'
2 | 'Some Number' | '123456'
etc.

在我的 C# 代码中,我使用 ADO.Net 使用 reader.GetString(2); 将值检索为字符串,然后让我的代码在别处根据需要转换它,例如... Int32.ParseInt(myObj.Value);。我正在考虑通过可能将值列更改为 sql_variant 数据类型来增强我的表,但我不知道这样做有什么好处?基本上,让我的 value 列为 sql_variantvarchar(1000) 相比有什么优势吗?


为了更清楚,我在某处读到 sql_variant 作为 nvarchar(4000) 返回给进行调用的客户端(哎哟)!但是,我不能在返回之前将其转换为它的类型吗?显然,我的代码必须进行调整以将值存储为对象而不是字符串值。我想,在我目前的情况下,使用 sql_variant 与其他类型相比有哪些优势/劣势?哦,值得一提的是,我打算在值列中存储日期时间、字符串和数值类型(int、decimal 等);我不打算存储和 blob 或图像等。

最佳答案

sql 变体的好处是您可以在一列中存储多个类型并保留类型信息。

Insert into MySettings values ('Name','MyName'); Insert into MySettings values ('ShouesNumber',45); Insert into MySettings values ('MyDouble',31.32);

如果要检索类型:

select SQL_VARIANT_PROPERTY ( value , 'BaseType' ) as DataType,* from mysettings

你有:

Datatype Name          Value
-----------------------------
varchar Name MyName
int ShoesNumber 45
numeric MyDouble 31.32

不幸的是,这有几个缺点:

  1. 不是很快
  2. 没有得到 ORM 框架的很好支持

关于c# - 在 SQL Server 中使用 sql_variant 而不是 varchar 有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13823130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com