SQL Server中的连接

SQL Server中的连接,sql,concatenation,Sql,Concatenation,我在SQL中有以下代码 DECLARE c CURSOR FOR select MSISDN FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=' + @Path + ';HDR=YES', 'SELECT MSISDN FROM [sheet1$]') 我想连接数据库中的路径,但连接不起作用,知道吗?您不能在OPENROWSET中进行字符串连接-命令需要字符串文本。我最近有一个项目正在转换一些使用OPENROW

我在SQL中有以下代码

DECLARE c CURSOR FOR select  MSISDN FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=' + @Path + ';HDR=YES', 'SELECT MSISDN FROM [sheet1$]')

我想连接数据库中的路径,但连接不起作用,知道吗?

您不能在
OPENROWSET
中进行字符串连接-命令需要字符串文本。我最近有一个项目正在转换一些使用OPENROWSET的旧SQL,并遇到了这个问题

一种解决方法是使用OPENROWSET将数据转储到表变量中,然后从表变量声明游标。类似于此(未经测试):


OPENROWSET很敏感-我相信(我必须仔细检查)您必须使用字符串文本-没有连接值。解决这个问题的一种方法是将整个命令串接在一个字符串中,然后执行它(我已经看到使用sp_executesql完成了这个操作)?为什么不直接通过
OPENROWSET
进行选择呢?@Tim,我使用光标是因为我正在比较excel中的表和SQL中的当前表,它工作正常,但问题是路径。关于连接,你认为应该怎么做?我已经发布了一个如何连接的示例。如果您可以发布SQL的其余部分,那么很有可能有比使用游标更好的比较方法。游标有其时间和位置,但通常不应使用。在我最近的项目中,我能够除去几个游标中的一个之外的所有游标,并使用基于集合的逻辑来完成游标的工作。
DECLARE @data AS TABLE(MSISDN VARCHAR(255))

DECLARE @sql AS VARCHAR(4000)

SET @sql = 'SELECT MSISDN FROM '
SET @sql = @sql + ' OPENROWSET(''Microsoft.ACE.OLEDB.12.0'','
SET @sql = @sql + '''Excel 12.0;Database=' + @Path + ';HDR=YES'','
SET @sql = @sql + '''SELECT MSISDN FROM [sheet1$]'')'

INSERT INTO @data
EXECUTE sp_executesql @sql

DECLARE c CURSOR FOR SELECT MSISDN FROM @data