【发布时间】:2020-10-12 15:46:26
【问题描述】:
如果 cnt=1,那么我想在 cnt = 2 时创建一个包含 2 列的临时表,然后我想要一个包含 3 列但名称与下面相同的临时表。
Declare @cnt int
Set @cnt = 2
IF @cnt = 1
Begin
if OBJECT_ID('tempdb..#temptest') is not null drop table #temptest;
create table #temptest
( ID int,
M1 char(2)
);
end
IF @cnt = 2
begin
if OBJECT_ID('tempdb..#temptest') is not null drop table #temptest;
create table #temptest
( ID int,
M1 char(2),
M2 char(2)
);
end
遇到错误
'数据库中已经有一个名为'#temptest'的对象。
如何做到这一点..请帮忙?
【问题讨论】:
-
解析器会在你的逻辑被检查之前阻止你这样做(见this question for some background)。即使您这样做(例如动态生成创建表),您仍然无法在代码的后面部分引用
M2,除非所有该代码也 使用动态 SQL。@cnt = 2时为什么不创建所有三列并忽略第三列? -
@shivkumar 。 . .创建包含两列的临时表,并在必要时使用
alter table添加额外的列。 -
@Gordon 但是如果你以后有引用
M2的代码,当@cnt = 1时它会失败。在这种情况下,如果您必须用相同的IF逻辑包围后面的每个语句,不妨创建两个不同的表。 -
@shivkumar 您还可以找到更多详细信息here
-
@AaronBertrand/Gordon linoff 感谢您的 cmets。是的,我正在使用 alter table 根据 IF 条件添加额外的列并且它正在工作。我也在动态 sql 中使用这些表来执行。
标签: sql sql-server sql-server-2012 temp-tables