我想将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
列,获取所有的marque值,将值与我表中的值进行比较,获取所有ID,最后插入Ids进入我的桌子材料。
我尝试了这段代码,但它显示错误
关键字'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
中,我从表格中检索所有ID,其中名称(marque)等于Excel表格中的名称。
在第二个查询@SQL1
中,我将Excel工作表中的serviceTag
值插入表格
在最后一个@SQL2
中,我在表格材料中插入了从第一个查询中检索到的ID
我的逻辑是否正确?这是我应该怎么做?我需要帮助!!
答案 0 :(得分:0)
尝试更改此行:
SET @SQL2 = 'INSERT INTO Material (MARQUE) SELECT * FROM '+@SQL''
对此 - 即用括号包装@SQL:
SET @SQL2 = 'INSERT INTO Material (MARQUE) SELECT * FROM (' + @SQL + ')'
答案 1 :(得分:0)
我找到了解决方案,它非常简单,应该从第一次开始就考虑它。我将excel表中的所有数据导入到临时表中,然后获取到我的标记表中获取所有ID并将它们直接插入到我的材料表中。 这就是我实现这个目标的方式
USE [AxaStock]
GO
ALTER PROCEDURE [dbo].[spx_Import]
@SheetName varchar(20),
@FilePath varchar(100),
@HDR varchar(3),
@TableName varchar(50)
AS
BEGIN
DECLARE @SQL nvarchar(1000)
DECLARE @QUERY nvarchar(1000)
SET @SQL = 'INSERT INTO ESSAIE (serviceTag, periodeGarantie, periodeLeasing, marque, designation, serie, entite, dateDG, nCommande) SELECT serviceTag, periodeGarantie, periodeLeasing, marque, designation, serie, entite, dateDG, nCommande FROM OPENDATASOURCE'
SET @QUERY = 'insert into Materiel (serviceTag, idMarque, idTypeMateriel, idSerieMateriel) select distinct serviceTag, idMarque, idTypeMateriel, '+
'idSerieMateriel from ESSAIEIMPORT ess, MarqueMateriel mm, Serie s, TypeMateriel tm where mm.marque=ess.marque and tm.nomType=ess.designation and '+
's.serieMateriel=ess.serie delete from ESSAIEIMPORT'
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 + ']'
EXEC sp_executesql @SQL
EXEC sp_executesql @QUERY
END