嗨,如何将
JSON
文件插入到 Database
中的单元格中?我不想存储文件路径,但想将 Content
文件的整个 JSON
存储到字段中。
我能做什么?
JSON 数据作为字符串存储/传输。您可以将其存储在普通的 NVARCHAR 列中。
json 文本有多大?,具体取决于如果内容不大,则应该有一个 varchar 字段,如果有很多 json 文本,则应该有 CLOB, json 只是文本,所以你只需读取文件内容,也许是一些 transact-sql 脚本,然后将其插入表中
如上所述,您可以将 json 文件存储在 NVARCHAR(MAX) 列中。以下是如何将 json 文件加载到 NVARCHAR(MAX) 变量中的示例。
考虑这个示例 .json 文件 top-posts.json:
[
{
"Id":6107,
"Score":176,
"ViewCount":155988,
"Title":"What are deconvolutional layers?",
"OwnerUserId":8820
},
{
"Id":155,
"Score":164,
"ViewCount":25822,
"Title":"Publicly Available Datasets",
"OwnerUserId":227
}
]
这是一个使用 OPENROWSET 和批量导入导入 json 文件的 SQL 脚本。我们还传入 json 文件所在文件夹的路径。它与 .sql 文件脚本放在同一文件夹中。
Sql 脚本import_json_file_openrowset.sql:
DECLARE @JSONFILE VARCHAR(MAX);
SELECT @JSONFILE = BulkColumn
FROM OPENROWSET (BULK '$(FullScriptDir)\top-posts.json', SINGLE_CLOB) AS j;
PRINT 'JsonFile contents: ' + @JSONFILE
IF (ISJSON(@JSONFILE)=1) PRINT 'It is valid Json';
这里的.bat文件将当前文件夹作为变量传递给sql脚本
runsqlscript.bat
@set FullScriptDir=%CD%
sqlcmd -S .\SQLEXPRESS -i import_json_file_openrowset.sql
输出:
sqlcmd -S .\SQLEXPRESS -i import_json_file_openrowset.sql
JsonFile contents: [
{
"Id":6107,
"Score":176,
"ViewCount":155988,
"Title":"Toreboss: What are deconvolutional layers?",
"OwnerUserId":8820
},
{
"Id":155,
"Score":164,
"ViewCount":25822,
"Title":"Publicly Available Datasets",
"OwnerUserId":227
}
]
It is valid Json
使用变量 JSONFILE,您可以对其执行任何操作,例如将其插入到表的新行中的列中。