【问题标题】:Create a column with universal data type?创建具有通用数据类型的列?
【发布时间】:2020-03-26 10:40:08
【问题描述】:

有没有办法创建一个具有“通用”数据类型的列? 我想要的是每行可以有不同数据类型的列。

对于每次插入,想法是设置数据类型(nvarchar、int、bigint、float、decimal),然后插入值。

【问题讨论】:

  • 这听起来像是你想要做错事。为什么需要它?
  • 简短的回答是“不”。更长的答案是sql_variant 确实存在,但不要使用它;它带有大量警告,最终您仍然需要将该列中存储的结果转换为正确的数据类型。考虑到这一点的模糊性,以及你所说的你所追求的,这听起来像是XY problem
  • 我想创建一个存储过程,它通过创建动态 sql 将新行插入到任何表中。因此,客户端需要以某种方式传递要插入的字段。到目前为止,似乎表值参数会很好。

标签: sql-server azure-sql-database sql-server-2017 azure-sql-server


【解决方案1】:

您可以使用sql_variant 数据类型来存储各种 SQL Server 支持的数据类型的值。

CREATE   TABLE tableA(colA sql_variant, colB int)  
INSERT INTO tableA values ( cast (46279.1 as decimal(8,2)), 1689)  
SELECT   SQL_VARIANT_PROPERTY(colA,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(colA,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(colA,'Scale') AS 'Scale'  
FROM      tableA  
WHERE      colB = 1689 

【讨论】:

    【解决方案2】:

    我见过Json数据类型用于在Sql中实现一个列的可变数据类型,然后给你noSql通常提供的灵活性。您可以拥有 Json 类型的列,然后放入 {"value": myBigInt} 或 {"value": "myVarChar"}。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2018-11-04
      • 2021-09-06
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多