Tsql 联接表变量与联接视图

Tsql 联接表变量与联接视图,tsql,join,view,Tsql,Join,View,我有一个运行非常慢的存储过程。因此,我想在一个单独的视图中提取一些查询 我的代码如下所示: DECLARE @tmpTable TABLE(..) INSERT INTO @tmpTable (..) *query* (returns 3000 rows) Select ... from table1 inner join table2 inner join table3 inner join @tmpTable ... 然后,我提取(复制粘贴)该*查询*并将其放入一个视图中,即vView

我有一个运行非常慢的存储过程。因此,我想在一个单独的视图中提取一些查询

我的代码如下所示:

DECLARE @tmpTable TABLE(..)

INSERT INTO @tmpTable (..) *query* (returns 3000 rows)

Select ... from table1
inner join table2
inner join table3
inner join @tmpTable
...
然后,我提取(复制粘贴)该*查询*并将其放入一个视图中,即vView

这样做会给我一个不同的结果:

Select ... from table1
    inner join table2
    inner join table3
    inner join vView
    ...
为什么??我可以看到vView和@tmpTable都返回3000行,因此它们应该匹配(还执行了一个except查询来检查)

任何意见都将是非常宝贵的,因为我觉得这件事很棘手

编辑:

这是获取结果的完整查询(使用@tmpTable或vView会得到不同的结果,尽管结果看起来相同):


如果更改为此,则可能不需要视图/表

它连接到
客户机c
,似乎只是连接到
logonstatistics

--remove inner join ***@tmpTable or vView*** b on b.sid = c.sid
--change JOIN
left outer join (select distinct clientsid from logonstatistics) as ls on c.sid=ls.clientsid
并将SELECT子句中的
COUNT(b.sid)
更改为
COUNT(c.sid)

否则,如果得到不同的结果,我可以看到两个选项:

  • 表和视图具有不同的数据。你做过逐行比较吗
  • 一个为NULL,一个为值(特别是对于将影响连接的sid列)

  • 最后,当你说“不同的结果”时,你的意思是得到x2行还是x3行?不同的计数?什么?

    您能提供更多的代码和信息吗?@tmpTable查询中有何位置?加入不同吗?是“更多行”还是“重复”?我添加了select本身,但是用于构建@tmpTable和vView的查询很重,其中包含内部联接、并集等,但结果集是不同的。请使用定义插入@tmpTable代码?内部联接也可用于筛选行。
    --remove inner join ***@tmpTable or vView*** b on b.sid = c.sid
    --change JOIN
    left outer join (select distinct clientsid from logonstatistics) as ls on c.sid=ls.clientsid