【问题标题】:Import Dynamic Excel into SQL 2008 r2将动态 Excel 导入 SQL 2008 r2
【发布时间】:2014-02-12 23:38:03
【问题描述】:

我正在使用链接服务器将 excel 文件导入 SQL 2008 r2。列名总是不同的。唯一一致的是文件名和工作表名。

我附上了导入的样子。

我需要将这个原始数据循环并导入到一个表中:

INSERT INTO importholding(prodcode, width, height, price)

prodcode 的值类似于 'ab30012' (ab+a2+b1),宽度为 012,高度为 30,价格为 34.50。这将是表中的一条记录。

有人能指出正确的方向吗?

【问题讨论】:

  • 您可以添加另一个工作表并使用 Excel 公式获取工作表右侧 4 列(产品、宽度、高度、价格)中的数据吗?
  • 如果有可能,我完全赞成。你知道有一种方法可以解析数据以便我这样做吗?

标签: sql sql-server excel sql-server-2008 import


【解决方案1】:
DECLARE @columns nvarchar(max)
SELECT @columns = ISNULL(@columns+',','') + QUOTENAME([name]) FROM sys.columns WHERE object_id = OBJECT_ID('MyTable') AND [column_id] > 1 ORDER BY [column_id]

DECLARE @sql nvarchar(max)
SET @sql = N'SELECT ''ab''+LTRIM(STR([000]))+REPLACE(STR([b],3),'' '',''0'') AS [prodcode], [000] AS [height], [b] AS [width], [price] FROM MyTable UNPIVOT([price] FOR [b] IN ('+@columns+')) p'

INSERT INTO importholding(prodcode, width, height, price)
EXEC sp_executesql @sql

【讨论】:

  • 感谢您的回复。您的代码示例抛出“'price' 附近的语法错误。知道是什么原因造成的吗?
  • 哪一行报错了?您是否将“MyTable”更改为导入表的名称?
  • SSMS 说错误在第 1 行,这绝对没有任何意义。我认为错误来自声明的非关键部分。我将“MyTable”更改为“Book1$”,这是通过链接服务器读取的 Excel 电子表格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2013-12-21
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多