在 T-SQL 中不使用临时 table 检查 JSON 文件信息
Checking the JSON file information without using a temp table in T-SQL
假设我的程序中有一个名为 @ImageURL
的 JSON 输入参数,具有以下结构,用于存储和操作我的上传器部分。
[
{
"Title": "some title",
"Urls": "some url",
"Type": "application/pdf",
"IsPrimary": true
},
...
]
这个 JSON 字符串总是有不止一组标题、URL 等。但在某些情况下,我坚持检查它是否只包含一组,因为我不能确定 front-end 开发人员将以正确的格式为我发送 JSON。
为了检查这一点,我使用了以下似乎有效的代码,但我觉得它不干净,可能有比创建 TMP table 并检查它 COUNT
更好的方法来编写它。
DECLARE @JSONImageFile TABLE(
Level1ID INT,
JSONImageFile NVARCHAR(MAX),
JSONImageFileTitle NVARCHAR(1000),
JSONImageFileType NVARCHAR(100),
JSONImageFileIsPrimary BIT
)
INSERT INTO @JSONImageFile(
Level1ID,
JSONImageFile,
JSONImageFileTitle,
JSONImageFileType,
JSONImageFileIsPrimary
)
SELECT
@Level1ID,
Urls,
Title,
Type,
IsPrimary
FROM OPENJSON(@ImageURL) WITH (
Urls NVARCHAR(MAX),
Title NVARCHAR(1000),
Type NVARCHAR(100),
IsPrimary BIT
)
IF (SELECT COUNT(*) FROM @JSONImageFile) = 1 /* the main code */
提前感谢您的回答。
如果是 JSON 数组,您可以尝试使用 OPENSJON()
和默认模式解析此数组并检查返回的 key
列的最大值:
JSON:
DECLARE @ImageUrl nvarchar(max) =
N'[
{
"Title": "some title",
"Urls": "some url",
"Type": "application/pdf",
"IsPrimary": true
},
{
"Title": "some title",
"Urls": "some url",
"Type": "application/pdf",
"IsPrimary": true
}
]'
声明:
IF EXISTS (
SELECT 1
FROM OPENJSON(@ImageUrl)
HAVING MAX(CONVERT(int, [key])) = 0
)
PRINT 'Success'
ELSE
PRINT 'Error'
假设我的程序中有一个名为 @ImageURL
的 JSON 输入参数,具有以下结构,用于存储和操作我的上传器部分。
[
{
"Title": "some title",
"Urls": "some url",
"Type": "application/pdf",
"IsPrimary": true
},
...
]
这个 JSON 字符串总是有不止一组标题、URL 等。但在某些情况下,我坚持检查它是否只包含一组,因为我不能确定 front-end 开发人员将以正确的格式为我发送 JSON。
为了检查这一点,我使用了以下似乎有效的代码,但我觉得它不干净,可能有比创建 TMP table 并检查它 COUNT
更好的方法来编写它。
DECLARE @JSONImageFile TABLE(
Level1ID INT,
JSONImageFile NVARCHAR(MAX),
JSONImageFileTitle NVARCHAR(1000),
JSONImageFileType NVARCHAR(100),
JSONImageFileIsPrimary BIT
)
INSERT INTO @JSONImageFile(
Level1ID,
JSONImageFile,
JSONImageFileTitle,
JSONImageFileType,
JSONImageFileIsPrimary
)
SELECT
@Level1ID,
Urls,
Title,
Type,
IsPrimary
FROM OPENJSON(@ImageURL) WITH (
Urls NVARCHAR(MAX),
Title NVARCHAR(1000),
Type NVARCHAR(100),
IsPrimary BIT
)
IF (SELECT COUNT(*) FROM @JSONImageFile) = 1 /* the main code */
提前感谢您的回答。
如果是 JSON 数组,您可以尝试使用 OPENSJON()
和默认模式解析此数组并检查返回的 key
列的最大值:
JSON:
DECLARE @ImageUrl nvarchar(max) =
N'[
{
"Title": "some title",
"Urls": "some url",
"Type": "application/pdf",
"IsPrimary": true
},
{
"Title": "some title",
"Urls": "some url",
"Type": "application/pdf",
"IsPrimary": true
}
]'
声明:
IF EXISTS (
SELECT 1
FROM OPENJSON(@ImageUrl)
HAVING MAX(CONVERT(int, [key])) = 0
)
PRINT 'Success'
ELSE
PRINT 'Error'