【问题标题】:Script to generate SQL INSERT statements from SELECT statement in LinqPad从 LinqPad 中的 SELECT 语句生成 SQL INSERT 语句的脚本
【发布时间】:2018-05-17 18:48:14
【问题描述】:

除了concatenation 之外,还有什么简单的方法可以从 Linqpad 中 SELECT 查询结果的每一行创建单独的 SQL INSERT 语句?

This 接近我想要的,但我认为它不接受 SQL SELECT 字符串作为输入。

This 也接近我想要的,但输出不是单独的 INSERT 语句。

【问题讨论】:

  • 在 LINQPad 中使用 SQL 而不是 LINQ 有什么特别的原因吗?
  • 我现在比 LINQ 更熟悉 SQL。
  • 但是您已经连接到 LINQPad 中的数据库设置了吗?

标签: sql-server linqpad


【解决方案1】:

您可以使用第一个建议中的DumpAsInsert

因为DumpAsInsert不止一次使用IEnumerable,你必须将查询实例化到内存中:

var sel = this.ExecuteQuery<Accounts>(@"Select * from Accounts Where Actid < 100").ToList();
sel.DumpAsInsert("Accountscopy", "Actid");

【讨论】:

  • 我将第一个链接中的代码复制到了一个新的 LINQPad 选项卡中,然后编辑了 Main() 部分以包含上面的行。这非常适合桌子,谢谢。我的用例是自定义选择查询(我无法创建视图,因为我对数据库具有只读访问权限)。您知道我如何更改您的语法以使用选择查询。我试过var sel = this.ExecuteQueryDynamic("Select x,y,z, from tableName").ToList();sel.DumpAsInsert("TableNameInOtherDb") 但这只是产生了INSERT INTO [TableNameInOtherDb] () VALUES (); 有什么想法吗?
  • @BarrettNashville 我的示例代码正是我使用 LINQPad 连接对 MS SQL Server 执行的代码,为每条记录生成 SQL INSERT 语句。你想和什么 SQL 对话?
  • 对。我只是说我想不出一种方法来忽略Accounts 类型,而只是将自定义SELECT 查询作为参数传递。所以,假设我想为SELECT Actid, AccountName + ' (ARCHIVE)' as ModifiedAccountName from Accounts 这样的语句生成INSERT 语句作为参数。我认为它不会起作用,因为DumpAsInsert 从作为类型传递的表名生成字段列表。但是,这没什么大不了的。我会继续并将其标记为答案。感谢您的帮助。
  • @BarrettNashville 如果您在 LINQPad 中设置了连接,则它应该在您创建连接时自动为表创建类。 DumpAsInsert 使用该类来创建 INSERT 语句。如果您没有类或连接,为什么不直接使用 SQL 到 INSERT INTO SELECT
猜你喜欢
  • 2020-01-22
  • 1970-01-01
  • 2016-07-02
  • 2012-10-18
  • 2011-12-04
  • 2021-01-19
  • 1970-01-01
  • 2023-02-17
相关资源
最近更新 更多