【发布时间】:2014-09-13 09:52:04
【问题描述】:
我想将 Excel 工作表中的数据导入我的 SQL Server 2008 数据库。
我有一个包含不同列的 Excel 工作表:
Service tag | marque | Type | Serial
FGT3456 | DELL | UC | Optiplex 760
我的表具有相同的结构,但不是varchar 值,而是外键(ID)
示例(表格材料)
Service tag | marque| Type | Serial
FGT3456 | 1 | 18 | 27
我想要做的是获取 Excel 表中的 marque 列,获取所有品牌值,将这些值与我的表中的值进行比较,获取所有它们的 ID,最后将 Id 插入我的表材料。
我试过这段代码,但它显示错误
关键字“SELECT”附近的语法不正确。
')' 附近的语法不正确。
对象名称“SQL”无效。
这是我的代码
ALTER PROCEDURE [dbo].[spx_Import]
@SheetName varchar(20),
@FilePath varchar(100),
@HDR varchar(3),
@TableName varchar(50)
AS
BEGIN
DECLARE @SQL nvarchar(1000)
DECLARE @SQL1 nvarchar(1000)
DECLARE @SQL2 nvarchar(1000)
SET @SQL = 'SELECT idMarque FROM MarqueMateriel WHERE marque = SELECT (marque) FROM OPENDATASOURCE'
SET @SQL1 = 'INSERT INTO Material (Service tag) SELECT (service tag) FROM OPENDATASOURCE'
SET @SQL2 = 'INSERT INTO Material (MARQUE) SELECT * FROM '+@SQL''
SET @SQL = @SQL + '(''Microsoft.ACE.OLEDB.12.0'',''Data Source='
SET @SQL = @SQL + @FilePath + ';Extended Properties=''''Excel 12.0;HDR='
SET @SQL = @SQL + @HDR + ''''''')...['
SET @SQL = @SQL + @SheetName + ']'
SET @SQL1 = @SQL1 + '(''Microsoft.ACE.OLEDB.12.0'',''Data Source='
SET @SQL1 = @SQL1 + @FilePath + ';Extended Properties=''''Excel 12.0;HDR='
SET @SQL1 = @SQL1 + @HDR + ''''''')...['
SET @SQL1 = @SQL1 + @SheetName + ']'
SET @SQL1 = @SQL2 + '(''Microsoft.ACE.OLEDB.12.0'',''Data Source='
SET @SQL1 = @SQL2 + @FilePath + ';Extended Properties=''''Excel 12.0;HDR='
SET @SQL1 = @SQL2 + @HDR + ''''''')...['
SET @SQL1 = @SQL2 + @SheetName + ']'
EXEC sp_executesql @SQL
EXEC sp_executesql @SQL1
EXEC sp_executesql @SQL2
END
在第一个查询 @SQL 中,我从表 Material 中检索所有 ID,其中 name(marque) 与 Excel 表中的 ID 相同。
在第二个查询 @SQL1 中,我将 Excel 工作表中的 serviceTag 值插入到表中
在最后一个 @SQL2 中,我将从第一个查询中检索到的 ID 插入到表材料中
我的逻辑正确吗?这是我应该如何进行的吗?请问我需要帮助!!
【问题讨论】:
标签: sql-server excel sql-server-2008