存储过程连接



我刚刚在我的存储过程中添加了一个临时表,并且我正在尝试将这个表连接到这个存储过程中的其他字段。这个更改会影响我的包的运行方式。所以过程运行正常,但我的包给了我一个错误'删除外部列'的例子

If object_id() is null
Begin
Create table #...
Insert into table #...
(
Value int
Name varchar
)
Select value from # where .....
End

这运行良好,但我认为我的问题来自下面的连接

Select ab.value, * from
(
Select top 100
...
...
...
...
Case when this then this 
Else null
End as usage
From ...
Left join ...
On 
Left join..
On
Left join
On 
)cd
Left join #.. ab on
ab. =  cd.

这样做的结果将我的原始存储过程(即括号中的cd表)连接到创建的临时表,并带回空字段。这不是我想要的。右连接也不起作用。我可以把这个作为case语句吗?

我只希望临时表中的'value'字段作为我的结果中的字段。我想把它映射到我的ssis包

如果您的临时表只有一行,则应该这样做

declare @whatever varchar(10);
set @whatever = 'Foo'
select @whatever, A.* from table_A as A

如果你的临时表有不止一行,你正在做一个笛卡尔积(它匹配表a中的每一行和表b中的所有行)。这是一个非常糟糕的事情!

Select * from table_A, table_B  (make no comparison statement)

如果您这样做,它将杀死您的系统。例如,我对两个小表(439行和193行)这样做,结果集超过47,000条记录!

我说过这是一件可怕的事情吗?

最新更新