다음 코드를 사용하여 임시 테이블이 있는지 확인하고 테이블을 다시 만들기 전에 테이블을 삭제하십시오. 열을 변경하지 않는 한 제대로 작동합니다. 나중에 열을 추가하면 “잘못된 열”이라는 오류가 발생합니다. 내가 뭘 잘못하고 있는지 알려주세요.
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
)
select company, stepid, fieldid from #Results
--Works fine to this point
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
NewColumn NVARCHAR(50)
)
select company, stepid, fieldid, NewColumn from #Results
--Does not work
답변
오류를 재현 할 수 없습니다.
아마도 문제를 이해하지 못했을 것입니다.
다음은 SQL Server 2005에서 두 번째 선택 결과에 추가 “foo”열이 표시되어 제대로 작동하는 것입니다.
IF OBJECT_ID('tempdb..#Results') IS NOT NULL DROP TABLE #Results
GO
CREATE TABLE #Results ( Company CHAR(3), StepId TINYINT, FieldId TINYINT )
GO
select company, stepid, fieldid from #Results
GO
ALTER TABLE #Results ADD foo VARCHAR(50) NULL
GO
select company, stepid, fieldid, foo from #Results
GO
IF OBJECT_ID('tempdb..#Results') IS NOT NULL DROP TABLE #Results
GO
답변
진술서는 순서대로 이루어져야한다
- 테이블 변경 문
- 가다
- 문장을 선택하십시오.
사이에 ‘GO’가 없으면 전체가 하나의 단일 스크립트로 간주되며 select 문이 열을 찾을 때 찾을 수 없습니다.
‘GO’를 사용하면 스크립트의 일부를 ‘GO’까지 단일 배치로 간주하여 ‘GO’이후 쿼리에 들어가기 전에 실행됩니다.
답변
dropping
임시 테이블을 재생성 하는 대신 truncate
재사용 할 수 있습니다.
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
Truncate TABLE #Results
else
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
)
사용 Sql Server 2016
하거나 Azure Sql Database
다음 구문을 사용하여 임시 테이블을 삭제하고 다시 작성하십시오. 자세한 내용은 여기 MSDN
통사론
DROP TABLE [존재하는 경우] [database_name. [schema_name]. | schema_name ] table_name [, … n]
질문:
DROP TABLE IF EXISTS tempdb.dbo.#Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
)
답변
문제는 실행을 배치로 분리하기 위해 사이에 GO 문을 추가해야한다고 생각합니다. 두 번째 삭제 스크립트로 즉 IF OBJECT_ID('tempdb..#Results') IS NOT NULL DROP TABLE #Results
, 임시 테이블을 단일 배치의 일부로 삭제하지 않았습니다. 아래 스크립트를 사용해보십시오.
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
)
GO
select company, stepid, fieldid from #Results
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
NewColumn NVARCHAR(50)
)
GO
select company, stepid, fieldid, NewColumn from #Results
답변
이는 한 줄의 코드로 수행 할 수 있습니다.
IF OBJECT_ID('tempdb..#tempTableName') IS NOT NULL DROP TABLE #tempTableName;
답변
이것은 나를 위해 일했다 :
social.msdn.microsoft.com/Forums/en/transactsql/thread/02c6da90-954d-487d-a823-e24b891ec1b0?prof= 필수
if exists (
select * from tempdb.dbo.sysobjects o
where o.xtype in ('U')
and o.id = object_id(N'tempdb..#tempTable')
)
DROP TABLE #tempTable;
답변
OBJECT_ID
나를 위해 작동하지 않기 때문에 내 측면에서 약간의 의견 . 항상
`#tempTable이 존재하지 않습니다
그것이 비록 ..even 않습니다 존재합니다. 방금 다른 이름 ( _
밑줄로 접두사)이 저장되어 있음을 알았습니다 .
#tempTable________
이것은 나를 위해 잘 작동합니다 :
IF EXISTS(SELECT [name] FROM tempdb.sys.tables WHERE [name] like '#tempTable%') BEGIN
DROP TABLE #tempTable;
END;