MS SQL JSON类型type

在MS SQL Server 2016,已经支持JSON处理。

执行下面代码,将获取ms sql server对象类型以及其说明:

 

IF OBJECT_ID('tempdb.dbo.#json_type') IS NOT NULL DROP TABLE #json_type

CREATE TABLE #json_type (    
    [type] TINYINT,
    [data_type] NVARCHAR(30)
)
INSERT INTO  #json_type ([type],[data_type]) VALUES 
(0,'null'),
(1,'string'),
(2,'int'),
(3,'true/false'),
(4,'array'),
(5,'object')

SELECT [type],[data_type] FROM #json_type
Source Code

 
把它写成一个自定义函数:

 

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:      Insus.NET
-- Create date: 2019-05-23
-- Update date: 2019-05-23
-- Description: 获取存储过程参数数据
-- =============================================
CREATE OR ALTER FUNCTION [dbo].[svf_JSONDataType]
(
    @type TINYINT
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    RETURN CASE
        WHEN @type = 0 THEN 'null'
        WHEN @type = 1 THEN 'string'
        WHEN @type = 2 THEN 'int'
        WHEN @type = 3 THEN 'true/false'
        WHEN @type = 4 THEN 'array'
        WHEN @type = 5 THEN 'object'
    END
END
Source Code

 

转载于:https://www.cnblogs.com/insus/p/10910718.html

<think>好的,我现在需要帮助用户了解在SQL建表时如何选择合适的数据类型。首先,我应该回顾一下已有的引用内容,看看有没有相关的信息可以利用。引用[2]提到了数据库设计、数据类型和约束的操作,应该是最相关的。 接下来,我需要整理常见的数据类型及其适用场景。比如整数类型有INT、BIGINT等,字符类型有VARCHAR和CHAR的区别,日期时间类型如DATETIME和DATE,还有二进制、货币、特殊类型等。同时要考虑存储空间和性能优化,比如使用最小的适用类型,避免NULL,使用约束等。 然后,结合引用中的最佳实践,比如引用[1]提到的遵循最佳实践和考虑云解决方案,引用[3]的状态优化可能涉及存储效率。不过用户的问题主要是数据类型选择,所以重点放在引用[2]提到的内容上。 还需要注意用户可能遇到的常见问题,比如过度使用VARCHAR、时间精度处理、自增主键的选择等。此外,生成相关问题时,要确保问题覆盖数据类型选择的不同方面,比如性能影响、存储优化、不同数据库系统的差异等。 最后,确保回答结构清晰,分点说明,并自然地加入引用标记。同时生成的相关问题要引导用户深入思考,帮助他们进一步学习。</think>### SQL建表时数据类型选择指南 #### 一、基本原则 1. **精确匹配**:根据数据特征选择最精确的类型,如整型数据优先选`INT`而非`VARCHAR`,日期数据用`DATE`而非字符串存储[^2]。 2. **存储优化**:选择最小适用类型,如年龄字段用`TINYINT`(0-255)而非`INT`,可节省3字节存储空间[^1]。 3. **性能优先**:定长类型(如`CHAR`)比变长类型(如`VARCHAR`)查询更快,但需权衡存储空间[^2]。 #### 二、常见类型选择场景 | 数据类型 | 适用场景 | 示例 | 注意事项 | |----------------|------------------------------------------|---------------------------|------------------------------| | **整数类型** | 数量、年龄、状态码等 | `INT`(-2^31~2^31-1) | 主键推荐`BIGINT`(支持更大范围)| | **小数类型** | 金额、测量值 | `DECIMAL(10,2)` | 避免使用`FLOAT`(有精度损失)| | **字符类型** | 姓名、地址、描述文本 | `VARCHAR(255)` | 长度固定用`CHAR`(如身份证号)| | **日期类型** | 订单时间、生日 | `DATETIME`(精确到3.33ms)| 纯日期用`DATE`可节省空间 | | **二进制类型** | 图片、文件 | `VARBINARY(MAX)` | 超过8KB用`FILESTREAM` | | **特殊类型** | 地理数据、JSON、XML | `GEOGRAPHY`(SQL Server) | 需版本支持(如2016+) | #### 三、最佳实践建议 1. **避免过度使用VARCHAR**: - 虽然灵活,但会: - 失去数据验证能力(如日期格式) - 增加存储开销(需额外长度标识) - 降低查询性能(需类型转换) 2. **NULL值处理**: - 非必要字段建议设置`NOT NULL` - 空字符串与NULL的区别: ```sql CREATE TABLE Users ( ID INT PRIMARY KEY, Phone VARCHAR(20) NULL -- 允许未填写 ); ``` 3. **使用约束增强完整性**: ```sql CREATE TABLE Orders ( OrderID INT IDENTITY(1,1) PRIMARY KEY, Quantity SMALLINT CHECK (Quantity > 0), -- 数量必须>0 Status CHAR(1) DEFAULT 'P' -- 默认值设置 ); ``` 4. **未来扩展性考虑**: - 选择可升级类型:如从`DATETIME`到`DATETIME2`(更高精度) - 使用`ALIAS TYPE`创建自定义类型: ```sql CREATE TYPE EmailAddress FROM VARCHAR(320); ``` #### 四、云环境特殊考量[^1] 1. **跨平台兼容性**:优先选择ANSI标准类型(如`VARCHAR`而非`NVARCHAR`) 2. **存储成本优化**:云数据库按存储计费时,需更严格选择紧凑类型 3. **内存优化表**:对高频访问表使用`MEMORY_OPTIMIZED`类型时,避免`TEXT`等大对象类型 ### 示例:电商用户表设计 ```sql CREATE TABLE Customers ( CustomerID BIGINT IDENTITY(1,1) PRIMARY KEY, Username VARCHAR(50) NOT NULL UNIQUE, Email VARCHAR(320) CHECK (Email LIKE '%@%.%'), BirthDate DATE, LastLogin DATETIME2(3), LoyaltyPoints INT DEFAULT 0, ProfileData NVARCHAR(MAX) -- 存储JSON格式扩展数据 ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值