Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有动态sql变量插入查询的OpenRowset_Sql_Sql Server_Excel - Fatal编程技术网

带有动态sql变量插入查询的OpenRowset

带有动态sql变量插入查询的OpenRowset,sql,sql-server,excel,Sql,Sql Server,Excel,我想执行这个查询。因为只有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 Server 2008上的表中插入变量SQL。我的目标是使文件路径像datab

我想执行这个查询。因为只有
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 Server 2008上的表中插入变量SQL。我的目标是使文件路径像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
 ')
并使用文件路径:

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
 ')

为此,您需要使用动态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

为此,您需要使用动态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

你到底试了什么?如果你想在引号中加引号,你必须转义它们(将它们加倍)。e、 g’从Something’Firstval中选择‘Something’。我想知道我是否可以像在我的第一条消息中那样写,如果是真的,我想更正我的示例中的查询。我们将您的查询(给出语法错误的查询)添加到问题中,我们将提供帮助。语法错误几乎可以是任何东西。我已经编辑了我的邮件,请查看topSo中的@filePath???我无法使用不同的查询来解决语法错误,可以吗?那么您实际尝试了什么?如果你想在引号中加引号,你必须转义它们(将它们加倍)。e、 g’从Something’Firstval中选择‘Something’。我想知道我是否可以像在我的第一条消息中那样写,如果是真的,我想更正我的示例中的查询。我们将您的查询(给出语法错误的查询)添加到问题中,我们将提供帮助。语法错误几乎可以是任何东西。我已经编辑了我的邮件,请查看topSo中的@filePath???我无法使用其他查询解决语法错误,可以吗?