【问题标题】:insert dynamic columns in SQL database在 SQL 数据库中插入动态列
【发布时间】:2020-10-11 18:00:32
【问题描述】:

我正在创建一个从 PLC 读取数据并将其写入数据库的应用程序。

在我的 GUI 中,用户可以选择他想登录数据库的数据,但我想知道如何解决这个问题。

有时用户只想在数据库中记录一项:

INSERT INTO myTabel (name_data1) VALUES ("123")

但其他时候我必须能够选择更多数据:

INSERT INTO myTabel (name_data1, name_data2, name_data3) VALUES ("123", "456", "789")

我将如何编码?我的数据库中的列名 name_data1, name_data2, name_data3, ... 应该能够根据选择的数据进行更改 为此,我使用了 2 个字符串的列表

["name_data1", "123"],
["name_data2", "456"],
["name_data3", "789"]

所以问题还在于我不知道插入数据时表会是什么样子,这完全取决于用户选择将哪些数据插入数据库

如果我是正确的,这称为创建动态列,但我似乎没有找到关于这个主题的太多信息。

【问题讨论】:

  • 您将执行三个插入操作。
  • 您不使用多列。您使用单个列,为批次生成标识符,并使用该批次 ID 执行 N 次插入,其中 N 是批次中的项目数。
  • 有多少个选项/列可以选择用户?,10个选项,100个选项?。如果是固定数字,则使用单个 Insert 并仅传递相应的列值,其余的为 NULL。

标签: c# sql sql-insert


【解决方案1】:

你总是可以使用所有的列,如果没有提供值你传递 null

喜欢

INSERT INTO myTabel (name_data1, name_data2, name_data3) VALUES ("123", null, "789")

但是如果你想使用不总是推荐的动态 sql 看起来像这样:

DECLARE @sqlstatement as varchar(1000)= 'insert into  myTabel (name_data1, name_data2, name_data3) VALUES ( @col1, @col2, @col3)'

    declare @parmlist = '@col1 varchar(50) , @col2 varchar(50), @col3 varchar(50)'
    
    exec  sp_executesql
            @sqlstatement 
            ,@parmlist 
            , @col1  = '123'
            , @col2 = NULL
            , @col3 =NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多