【问题标题】:How to pass json value to stored procedure in node js如何将json值传递给节点js中的存储过程
【发布时间】:2020-04-16 16:28:23
【问题描述】:

我有一个存储过程,它在 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

【问题讨论】:

  • 我知道如何在 C# 代码中的存储过程中传递值,但我的问题是如何将 json 值传递给节点 js 中的存储过程
  • 您必须从 JSON 字符串中解析出值。您可以使用 JSON 反序列化。

标签: c# node.js sql-server-2008


【解决方案1】:

这在 SQL Server 2016 及更高版本中很简单。只需将 JSON 作为字符串传递给 SQL Server 并解析它以在服务器上加载 TVP。见Work with JSON data。这是从 JavaScript 向 SQL Server 传递批量数据的最佳方式。

在较旧的 SQL Server 版本中,对于不支持表值参数的客户端,您可以使用 XML、加载临时表或像这样调用过程:

declare @rights as TpUserRights

insert into @rights(ConfigId,FormId) 
values (@ConfigId,@FormId)

exec SpMergeUserRights @rights 

@ConfigId 和 @FormId 的绑定参数。并且要么为更多行绑定额外的参数,要么多次调用该过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2014-07-10
    • 2017-01-02
    相关资源
    最近更新 更多