[SQL] 열이 생성 한 후 SQL 서버 업데이트에 대한 잘못된 열 이름
SQL열이 생성 한 후 SQL 서버 업데이트에 대한 잘못된 열 이름
사람이 SQL Server에 대한이 코드를 잘못 무엇을 볼 수 있습니까?
IF NOT EXISTS(SELECT *
FROM sys.columns
WHERE Name = 'OPT_LOCK'
AND object_ID = Object_id('REP_DSGN_SEC_GRP_LNK'))
BEGIN
ALTER TABLE REP_DSGN_SEC_GRP_LNK
ADD OPT_LOCK NUMERIC(10, 0)
UPDATE REP_DSGN_SEC_GRP_LNK
SET OPT_LOCK = 0
ALTER TABLE REP_DSGN_SEC_GRP_LNK
ALTER COLUMN OPT_LOCK NUMERIC(10, 0) NOT NULL
END;
나는 이것을 실행하면, 내가 얻을 :
업데이트 명령에.
감사.
해결법
-
==============================
1.이 경우 당신은 NOT NULL로 컬럼을 추가하고 여기에 내 대답에 따라 한 성명에서 기존 행에 대한 값을 설정하여 문제를 방지 할 수 있습니다.
이 경우 당신은 NOT NULL로 컬럼을 추가하고 여기에 내 대답에 따라 한 성명에서 기존 행에 대한 값을 설정하여 문제를 방지 할 수 있습니다.
더 일반적으로이 문제는 구문 분석 / 컴파일 문제입니다. SQL Server는 문 중 하나를 실행하기 전에 일괄 처리의 모든 문을 컴파일하려고합니다.
때 문 참조를 모든 문에 존재하지 않는 테이블이 연기 컴파일이 적용됩니다. 테이블이 이미 존재하는 경우가 아닌 기존의 열을 참조하는 경우 오류가 발생합니다. 이번 라운드 가장 좋은 방법은 DML에서 다른 배치에 DDL을하는 것입니다.
성명 경우 모두 참조 기존 테이블이 아닌 기존의 열 및 오류 또는 컴파일하기 전에 던져되지 않을 수있는 존재하지 않는 테이블이 지연됩니다.
당신이 중 하나 (클라이언트 도구에 배치 분리 GO를 사용하여, 예를 들어)를 별도의 일괄 제출 또는 EXEC 또는 EXEC sp_executesql을 사용하여 개별적으로 컴파일 자식 범위에서 수행 할 수 있습니다.
첫 번째 방법은 배치를 확장 할 수 없습니다 ...는 IF로 코드를 리팩토링 할 필요합니다.
IF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = 'OPT_LOCK' AND object_ID = Object_id('REP_DSGN_SEC_GRP_LNK')) BEGIN ALTER TABLE REP_DSGN_SEC_GRP_LNK ADD OPT_LOCK NUMERIC(10, 0) EXEC('UPDATE REP_DSGN_SEC_GRP_LNK SET OPT_LOCK = 0'); ALTER TABLE REP_DSGN_SEC_GRP_LNK ALTER COLUMN OPT_LOCK NUMERIC(10, 0) NOT NULL END;
-
==============================
2.오류의 근본 원인은 SQL Server Management Studio를 다시 시작할 때까지 새로 추가 된 열 이름이 sys.syscolumns 및 sys.columns 테이블에 반영되지 않습니다이다.
오류의 근본 원인은 SQL Server Management Studio를 다시 시작할 때까지 새로 추가 된 열 이름이 sys.syscolumns 및 sys.columns 테이블에 반영되지 않습니다이다.
-
==============================
3.NOT은 COL_LENGTH 기능이있는 경우 귀하의 정보의 경우, 교체 할 수 있습니다. 그것은 두 개의 매개 변수
NOT은 COL_LENGTH 기능이있는 경우 귀하의 정보의 경우, 교체 할 수 있습니다. 그것은 두 개의 매개 변수
그것은 NULL을 반환 한 후 찾을 수없는 경우 지능 (4 바이트) : 열이 발견되면 다음 열 예의 데이터 타입의 범위를 반환합니다.
다음과 같이 그래서, 당신이 사용할 수 있으며 하나에 3 제표를 결합합니다.
IF (SELECT COL_LENGTH('REP_DSGN_SEC_GRP_LNK','OPT_LOCK')) IS NULL BEGIN ALTER TABLE REP_DSGN_SEC_GRP_LNK ADD OPT_LOCK NUMERIC(10, 0) NOT NULL DEFAULT 0 END;
그것은 간단합니다.
from https://stackoverflow.com/questions/12535405/invalid-column-name-on-sql-server-update-after-column-create by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 백업 SQL 스키마 만? (0) | 2020.07.10 |
---|---|
[SQL] 'HAVING 절'알 수없는 열 (0) | 2020.07.10 |
[SQL] 단지 SQL을 사용하여 반환 사전 UPDATE 열 값 (0) | 2020.07.10 |
[SQL] SSIS 연결 패키지에서 찾을 수 없습니다 (0) | 2020.07.10 |
[SQL] VARCHAR (-1) 무엇을 의미 하는가? (0) | 2020.07.10 |