c# - 如何将json值传递给节点js中的存储过程
问题描述
我有一个存储过程,它在 Microsoft SQL Server 中包含一个“用户定义的表类型”参数。我将“数据表”作为参数值传递给 C# 中的存储过程。我想知道如何将节点 js 中的 Json 数据作为“数据表”传递给这个存储过程。
用户定义的表类型:
CREATE TYPE [dbo].[TpUserRights] AS TABLE
(
[ConfigId] [int] NULL,
[FormId] [int] NOT NULL
)
存储过程:
CREATE PROCEDURE [dbo].[SpMergeUserRights]
(@UserRights TpUserRights ReadOnly)
AS
BEGIN
MERGE ModuleUserConfig AS [Target]
USING @UserRights AS [Source] ON [Target].ConfigId = [Source].ConfigId
WHEN NOT MATCHE BY TARGET
THEN
INSERT (ModuleId, FormId, UserId, CreatedBy)
VALUES (@ModuleId, [Source].FormId, @UserId, @CreatedBy)
WHEN MATCHED
THEN
UPDATE
SET FormId = [Source].FormId,
UserId = @UserId,
ModifiedDate = GETDATE(),
ModifiedBy = @CreatedBy;
END
解决方案
这在 SQL Server 2016 及更高版本中很简单。只需将 JSON 作为字符串传递给 SQL Server 并对其进行解析以在服务器上加载 TVP。请参阅使用 JSON 数据。从 JavaScript 来说,这是将批量数据传递到 SQL Server 的最佳方式。
在较旧的 SQL Server 版本上,对于不支持表值参数的客户端,您可以使用 XML、加载临时表或只调用如下过程:
declare @rights as TpUserRights
insert into @rights(ConfigId,FormId)
values (@ConfigId,@FormId)
exec SpMergeUserRights @rights
@ConfigId
和的绑定参数@FormId
。并且要么为更多行绑定附加参数,要么多次调用该过程。
推荐阅读
- css - 如何让 base64 编码的 SVG 过滤器在 Firefox 以外的其他浏览器中工作?
- javascript - 将值从一个属性移动到另一个属性
- jquery - id 在视口中时突出显示菜单项
- javascript - 带有组件的 Google 地图地理编码请求 - 语法
- html - 嗨,我有两个关于 CSS 的问题
- ruby-on-rails - Ruby on Rails - 在新页面/控制器上显示用户名
- ios - 收到此错误消息 Swift 4.2:实例成员 'jpegData' 不能用于类型 'UIImage';你的意思是使用这种类型的值吗?
- c++ - 如何在编译期间输出诊断消息以判断调用了哪个重载函数
- amazon-s3 - 创建具有特定前缀的对象时触发 lambda
- amazon-web-services - 从 cloudwatch 日志组到 lambda 的 aws 传入数据已损坏