【问题标题】:Insert result into temp table将结果插入临时表
【发布时间】:2016-07-08 11:28:06
【问题描述】:

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

我想出了这个解决方案

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的那些行

【问题讨论】:

  • 您应该识别错误消息中提到的第 33 行。在写作中,最后一个SELECT 完全没有意义,但注释掉的exec 表明您理解这一点。
  • 看起来你至少在+@user 附近缺少' - 所以我认为问题归结为你的@sql 字符串没有正确构建以及Gordon 提到的@ 987654331@
  • 如果您的 @user 确实是一个 varchar,那么您在之前和之后都会错过一个 '
  • 我尝试将 ´@user = ' +@user + ',´ 更改为 ´@user = ''' +@user + ''',´ 我仍然收到相同的错误消息

标签: sql-server tsql openrowset


【解决方案1】:

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

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

【讨论】:

  • 但这不需要我知道我的表中有哪些变量吗?
  • 是的,它需要您为表格指定字段。
  • 嗯,我明白了...如果我无法做到这一点怎么办?
  • 这个问题在this post中讨论。而here也是一个关于OPENROWSET的帖子。
猜你喜欢
  • 2015-11-12
  • 2020-01-26
  • 2015-05-03
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2019-12-22
相关资源
最近更新 更多