将结果插入临时表

时间:2016-07-08 11:28:06

标签: sql-server tsql openrowset

所以我已经阅读了这些帖子

然后我提出了这个解决方案

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

alter procedure [CP24SHOP].[spSearch_DitoNr_OemNr_EngineType]
    @user           nvarchar(255),
    @ditoNr         int,
    @oemNr          nvarchar(255) = null,
    @engineType     nvarchar(255) = null
as
begin
    if(@oemNr is null and @engineType is null)
        exec CP24SHOP.spSearchDitoNr
            @user = @user,
            @ditoNr = @ditoNr
    else
        begin
            declare @sql nvarchar(max) = 'SELECT *  
                                        FROM OPENROWSET(
                                            ''SQLNCLI'', 
                                            ''Server=localhost\ISTABGLOBAL;Trusted_Connection=yes;'',
                                            ''exec CP24SHOP.spSearchDitoNr
                                                @user = ' + @user + ',
                                                @ditoNr = ' + @ditoNr + ''')'

            --exec (@sql)

            SELECT * INTO #TempTable FROM (@sql) -- Line 33
                where OEMNumber = @oemNr
        end
end
return 0;

然而,在运行此脚本时,我收到以下错误:

  

消息102,级别15,状态1,过程spSearch_DitoNr_OemNr_EngineType,第33行
  ')'附近的语法不正确。

任何关于我的语法错误的想法都会导致我这是一个新的领域

修改 我尝试做的是调用存储过程CP24SHOP.spSearchDitoNr,然后只选择那些OEMNumber = @oemNr

的行

1 个答案:

答案 0 :(得分:1)

您无法使用SELECT * INTO #TempTable FROM (@sql),因为@sqlnvarchar(max)。您需要将OPENROWSET查询中的值保存到表格中。

有关详细信息,请查看this post。您可以使用INSERT INTO myTable EXEC sp_executesql(@sql)