我想执行此查询。因为只有OPENROWSET
不适用于变量:
EXEC
(
'
Insert into Table1
SELECT *
From OPENROWSET(MICROSOFT.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Users\AA\Desktop\Table1.xlsx',
'SELECT *
FROM [Sheet1$] ) '
)
用于在带有变量SQL的SQL Server 2008上的表中插入。我的目标是使文件路径动态化,如database ='+ @ FilePath +'
最后在openFiledialog控件的ado.Net中使用此代码
但它不起作用我得到语法错误
我已经解决但没有插入查询我认为插入的同样的东西总是逃避像那样的引号
EXEC
(
'SELECT *
From OPENROWSET(''MICROSOFT.ACE.OLEDB.12.0'',
''Excel 12.0;Database=C:\Users\AA\Desktop\Table1.xlsx'',
''SELECT *
FROM [Sheet1$]'') T
')
并使用FilePath:
Declare
@FilePath nvarchar(50)
SET @FilePath='C:\Users\AA\Desktop\Table1.xlsx'
EXEC
(
'SELECT *
From OPENROWSET(''MICROSOFT.ACE.OLEDB.12.0'',
''Excel 12.0;Database='+@FilePath+''',
''SELECT *
FROM [Sheet1$]'') T
')
答案 0 :(得分:2)
您需要为此使用动态sql并且最好在INSERT INTO和SELECT语句中显式使用列名。你可以做如下的事情。
DECLARE @SheetName NVARCHAR(MAX);
DECLARE @FilePath NVARCHAR(MAX);
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N' INSERT INTO Table1 ' +
N' SELECT * ' +
N' FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ' +
N' ''Excel 8.0;Database='+ @FilePath + ';'' ,' +
N' ''SELECT* FROM ['+ @SheetName +']'')'
EXECUTE sp_executesql @Sql