【问题标题】:Does SQLite support table-valued parameters? [duplicate]SQLite 是否支持表值参数? [复制]
【发布时间】:2021-12-22 07:48:34
【问题描述】:

我有一种情况,我想从设计时不知道架构的外部源导入数据,这作为 DataSet 进入了我的函数。

我想将数据集中的表导入 SQLite,理想情况下我想写这样的东西:

using (var connection = new SQLiteConnection("Data Source=temp.db")) {
    var command = connection.CreateCommand();
    command.CommandText = @"CREATE TABLE tempTable AS SELECT * FROM @tvp";
    SQLiteParameter param = command.Parameters.AddWithValue("tvp", importedData.Tables[0]);

    command.ExecuteNonQuery();
}

上面的代码抛出一个错误,说@tvp 附近有一个我无法摆脱的语法错误,SQLite 不支持表值参数还是我缺少一些语法?有没有实用的方法来做到这一点?

【问题讨论】:

  • 即使是这样:表值参数类型通常需要在服务器上定义无论如何,因此您需要知道定义表的架构 -值参数类型;不过,很确定它不会;我会说“也许是批量复制”,但sqlite doesn't do that either
  • @MarcGravell 根据answer,该查询在 SQL 2008 中有效,我刚刚在 2019 年进行了测试,实际上它抛出了一个错误,需要在服务器中创建类型
  • @MarkBenningfield 它没有回答关于表值参数的原始问题(无论如何我都想知道),但它确实表明我正在尝试做的事情不受支持。
  • @LeandroBardelli 哪个答案?对假定重复项的引用已经是评论,并且该问题的唯一答案已经与重复项中包含的内容有很大不同,老实说,我看不到有人将这些问题标记为重复项的任何其他方式,除非他们不这样做知道什么是表值参数,我认为这种解释不应该成为问题的一部分。

标签: c# sqlite


【解决方案1】:

不,它没有。

the documentation 可以看出,根本没有将表绑定到参数的机制。

您可以通过创建一个临时表并将其插入其中来解决此问题。

【讨论】:

  • 这个答案与重复参考接受的答案有什么不同?
  • 标记重复实际上是关于如何将表名作为参数传递,例如SELECT * FROM ?,其中名称是现有表。这个问题是关于如何传入一个整个表的数据(一个表值参数)
猜你喜欢
  • 2012-12-01
  • 2012-12-04
  • 1970-01-01
  • 2013-06-17
  • 2011-10-18
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
相关资源
最近更新 更多