Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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 server 为什么查询结果在存储过程中使用或从SSMS或DBeaver运行查询时不同_Sql Server - Fatal编程技术网

Sql server 为什么查询结果在存储过程中使用或从SSMS或DBeaver运行查询时不同

Sql server 为什么查询结果在存储过程中使用或从SSMS或DBeaver运行查询时不同,sql-server,Sql Server,我有一个疑问: insert into [dbo].[SEELOG_AGG_DETAIL] select SEELOG_TMP.NAME_MUT , SEELOG_TMP.DESCR_MUT , SEELOG_TMP.FUNCT_MUT , SEELOG_TMP.DEPT_MUT , SEELOG_TMP.[TYPE] , SEELOG_TMP.[DATE] , count(*) AS NUMBER_RECO

我有一个疑问:

insert into [dbo].[SEELOG_AGG_DETAIL]
select SEELOG_TMP.NAME_MUT
    , SEELOG_TMP.DESCR_MUT
        , SEELOG_TMP.FUNCT_MUT
        , SEELOG_TMP.DEPT_MUT
        , SEELOG_TMP.[TYPE]
        , SEELOG_TMP.[DATE]
        , count(*) AS NUMBER_RECORDS
        , SEELOG_TMP.ACTION
    from #SEELOG_TMP SEELOG_TMP with (index(#IDX_SEELOG_TMP_2))
    WHERE  (SEELOG_TMP.[TYPE] <> 'O')
        OR (
            SEELOG_TMP.[TYPE] = 'O'
            AND SEELOG_TMP.[MODULE] = 'PS'
            AND SEELOG_TMP.FUNCT_MUT <> ''
            ) 
        OR (
            SEELOG_TMP.[TYPE] = 'O'
            AND SEELOG_TMP.[MODULE] = 'ZP'
            AND SEELOG_TMP.FUNCT = 'LOGIN'
            ) 
    GROUP BY
          SEELOG_TMP.NAME_MUT
        , SEELOG_TMP.DESCR_MUT
        , SEELOG_TMP.FUNCT_MUT
        , SEELOG_TMP.DEPT_MUT
        , SEELOG_TMP.[TYPE]
        , SEELOG_TMP.[DATE]
        , SEELOG_TMP.ACTION
    OPTION (MAXDOP 4);
它使用临时表的内容创建一个普通数据库表,然后对普通表运行查询,得到了一个很好的结果。此查询包括列DEPT_MUT

在反存储过程中,我将列DEPT_MUT从查询中排除,存储过程返回的结果与对普通表运行查询相同

当我从DBeaver或SSMS运行查询时,我得到了预期的结果。但当我将查询放入存储过程时,结果是不同的。当从存储过程运行时,我只得到一行,但当从DBeaver或SSMS运行时,得到所有正确的组

在尝试查询添加和删除一些列时,我发现列DEPT_MUT有空值。从查询中删除此列,然后在存储过程中使用该查询,就可以了

那么,为什么在存储过程中运行时查询结果不同呢

希望有人能回答


提前感谢。

如果不了解如何创建和填充临时表,很难说

结果不同的唯一方式是,如果SEELOG_TMP提供不同的输入数据,您确定在SSMS中以及在PROC中以相同的方式计算SEELOG_TMP吗


你能展示一下proc是如何生成它的,而SSMS是如何创建它的吗?

基本上我会选择*从SEELOG\u SEELOG到SEELOG\u TMP。当我将代码从SEELOG\u SEELOG更改为select*到dbo.SEELOG\u TMP,然后从我的问题中运行查询时,我会得到一个不同的结果。您需要检查创建SEELOG\u TMP的代码,如果输入不同,那么输出也会不同。您不只是执行into,因为temp表上有索引,还有什么变化正在发生@JaccodeZwartSo在创建van temp表格或使用select into语句创建普通表格时,表格或列是否存在差异?不同之处在于您在临时表中放置了什么,您的问题并不完整,因为它没有显示如何创建临时表。查询结果不同的唯一方式是SEELOG_TMP中的数据不同。
SELECT ISNULL(USER1.NAAM, '') AS [NAME_USR]
    ,ISNULL(USER1.OMSCHR, '') AS [DESCR_USR]
    ,ISNULL(USER2.NAAM, '') AS [NAME_MUT]
    ,CASE 
        WHEN (ISNULL(USER2.OMSCHR, '') = '')
            AND (SEELOG.MODULE = 'ZP')
            THEN '-- Zorgportaal --'
        ELSE ISNULL(USER2.OMSCHR, '')
        END AS [DESCR_MUT]
    ,CAST(CASE 
            WHEN (ISNULL(USERFUNK.OMSCHR, '') = '')
                AND (SEELOG.MODULE = 'ZP')
                THEN ISNULL('-- ' + CASE 
                            WHEN SEELOG.FUNCTIE = 'LOGIN'
                                THEN CASE 
                                        WHEN (
                                                ISNUMERIC(SEELOG.INZAGEINFO) = 0
                                                OR LEN(SEELOG.INZAGEINFO) <> 7
                                                )
                                            AND (LEN(SEELOG.INZAGEINFO) > 0) -- filter op ACTIONURI werkt niet.
                                            THEN SEELOG.FUNCTIE + ' ARTS'
                                        ELSE SEELOG.FUNCTIE
                                        END
                            ELSE SEELOG.FUNCTIE
                            END + ' --', '')
            ELSE ISNULL(USERFUNK.OMSCHR, '')
            END AS NVARCHAR(60)) AS FUNCT_MUT
    ,ISNULL(USERAFD.OMSCHR, '') AS DEPT_MUT
    ,SEELOG.LOGUSERID
    ,LOGSESSI.LOGSESS_ID
    ,LOGSESSI.WINUSER
    ,LOGSESSI.WINSTAT
    ,SEELOG.[TYPE]
    ,SEELOG.[ACTIONURI]
    ,SUBSTRING(SEELOG.ACTIONURI,1, ABS( patindex('%/%', SEELOG.ACTIONURI)-1)) as ACTION
    ,SEELOG.AutoID
INTO #SEELOG_TMP
FROM dbo.SEELOG_SEELOGI SEELOG WITH (READUNCOMMITTED,INDEX (idx_SEELOG_SEELOGI_Primaire_volgorde))
LEFT OUTER JOIN dbo.SEELOG_NDZKKZ NOODKEUZE WITH (READUNCOMMITTED) ON SEELOG.KEUZE = NOODKEUZE.KeuzeID
LEFT OUTER JOIN dbo.ZISCON_LOGUSER LOGUSER WITH (READUNCOMMITTED) ON SEELOG.LOGUSERID = LOGUSER.LOGUSER_ID
LEFT OUTER JOIN dbo.ZISCON_LOGSESSI LOGSESSI WITH (READUNCOMMITTED) ON LOGSESSI.LOGSESS_ID = LOGUSER.LOGSESS_ID
LEFT OUTER JOIN dbo.ZISCON_USER USER1 WITH (READUNCOMMITTED) ON USER1.NAAM = LOGUSER.GEBRUIKER
LEFT OUTER JOIN dbo.ZISCON_USER USER2 WITH (READUNCOMMITTED) ON USER2.NAAM = LOGUSER.MUTGEBRUIK
LEFT OUTER JOIN dbo.ZISCON_USERFUNK USERFUNK WITH (READUNCOMMITTED) ON USER2.FUNKTIE = USERFUNK.CODE
LEFT OUTER JOIN dbo.ZISCON_USERAFD USERAFD WITH (READUNCOMMITTED) ON USERAFD.CODE = USER2.AFDELING
WHERE 
   SEELOG.AutoId BETWEEN  @AutoId_min_search AND @AutoId_max_search
OPTION (FORCE ORDER, MAXDOP 4);
select * info dbo.seelog_tmp from #seelog_tmp