【问题标题】:Import multiple files into a table将多个文件导入一个表
【发布时间】:2011-06-04 05:53:50
【问题描述】:

我有一个充满文件的目录。它们是 SQL 脚本,但我不想运行它们。我想将脚本文件的内容导入到我的数据库中的一个表中,以便以后运行。每个文件在表中都有自己的行。

我目前正在使用 Powershell,但如果有另一种不使用第三方软件的更简单方法,那么我也会对此持开放态度。

最初我开始编写循环文件的代码,使用 StreamReader 获取内容,然后构建一个插入语句来执行。我意识到,文件中的嵌入引号等可能存在很大问题。

感谢您提供的任何建议!

【问题讨论】:

  • 请告诉我们更多关于脚本的信息
  • 为什么嵌入引号会有问题?你不能使用参数化查询还是我误解了?
  • @bernd_k - 他们有文字。它们不是太大。我不知道您还需要知道什么,但如果您有具体问题,请告诉我。
  • @Martin - Powershell 有参数化查询吗?
  • 对了。不知道。脚本是否对服务器可见?你能用SELECT BulkColumn FROM OPENROWSET(BULK 'C:\scripts\foo.sql', SINGLE_BLOB) AS x加载它们吗?

标签: sql-server powershell import


【解决方案1】:

您能否删除嵌入的引号并将它们标记为要替换的逻辑部分 通过 String.Replace(old_str,new_str) 或 tsql REPLACE 在您的逻辑中?下面的示例显示 <condition_string> 标记所以你知道你已经特别照顾它了。

declare @finalQuery nvarchar(1000)

SET @finalQuery = 
(SELECT REPLACE ((
   SELECT REPLACE ((
      SELECT  REPLACE('Select <column_names> from <table_name> where 
                              <condition_string>' COLLATE Latin1_General_BIN,
      '<column_names>', 
      'ID,[name]' )),
   '<table_name>',
   '[MyTable]')),

'<condition_string>',
'[name] like ''%John%'''));

EXEC(@finalQuery);

GO

【讨论】:

  • 我最终在 Powershell 中做了一个 $string.Replace 只是为了让它工作,以便我可以测试其他方面,但它实际上工作得很好,所以我现在要坚持下去。
【解决方案2】:

通常,当您处理数据库中的文件时,您要么想要引用它们而不是导入全部内容(因此您只需将文件的路径存储在物理卷上)或者将它们存储为 BLOB (二进制大对象)。如果是后者,你也可以压缩它们。

这些技术的缺点是你不能只用 SQL 查询来搜索它们,但你没有说这对你来说是否是个问题?

【讨论】:

  • 你误解了这个问题。 OP 希望将从文件中读取的 SQL 存储到表中的列中,然后将该列的内容作为 SQL 执行。
  • 正如 Ken 所说,我需要以纯文本格式提供文件内容。我还需要完全包含数据库 - 我无法将脚本目录与数据库、维护路径等一起发布。
猜你喜欢
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2018-05-26
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多