하나의 테이블이 있는지 확인하는 if 문으로 다음 sql 스크립트를 둘러 쌀 필요가 있습니다. 성명서에는 더 많은 필드가 있지만 아래의 발췌문은 아이디어를 얻기에 충분해야합니다.sql 스크립트, if 및 go 문
if 문으로이 전체 배치를 둘러 쌉니다. 내가 GO를 가져 가면 잘못된 열인 TMP_FIELD에 대해 불평한다.
올바른 방법으로 어떤 방법을 사용할 수 있습니까? 내가하고있는 모든 작업은 여러 필드를 가져 와서 varchar에서 datetime으로 변경하는 것입니다. 이것은 setup.exe 파일의 일부이므로 향후 업그레이드를 위해 한 번만 실행하면됩니다. 특정 테이블이있는 경우 스크립트를 실행하지 않는 것으로 결정하는 방식입니다.
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE MY_TABLE ADD TMP_FIELD datetime
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
UPDATE MY_TABLE SET TMP_FIELD = modifiedDate
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE MY_TABLE DROP COLUMN modifiedDate
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE MY_TABLE ADD modifiedDate datetime
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
UPDATE MY_TABLE SET modifiedDate = TMP_FIELD
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE MY_TABLE DROP COLUMN TMP_FIELD
GO
GO를 가져갈 때 modifiedDate에 대한 오류가 발생합니다. 그런 뜻 이었습니까? "GO를 꺼내면 _modifiedDate_가 잘못된 열에 대해 불평합니다." –
TMP_FIELD은 (는) 잘못된 열입니다. – Rod
테스트 할 때 테이블 MY_TABLE을 다르게 정의했다고 생각합니다. 나는 테이블 스키마에 modifiedData 열을 포함시키지 않았다. 처음에는 예제를 자세히 읽지 않았으므로 함께 작업하고있는 원래 테이블의 스키마를 이해하지 못했습니다. –