2010-02-16 6 views
13

SQL Server 2008에서 작업하고 있습니다. 실제로 열을 삭제 한 다음 다시 추가하지 않고도 계산 된 열을 변경할 수 있습니까? 예를 들어,이 테이블이 :계산 된 열에서 열을 변경하는 방법

CREATE TABLE [dbo].[Prices](
[Price] [numeric](8,3) NOT NULL, 
[AdjPrice] AS [Price]/[AdjFactor], 
[AdjFactor] [numeric](8,3) NOT NULL) 

나중에 내가 제로 오류에 의해 잠재적 인 격차가 나는이 문제를 처리 할 수있는 [Adjprice] 열을 변경하려면,하지만 실현 난 그냥 열을 삭제하고 다시 추가하는 경우 , 나는 열 순서를 잃는다.

내가 좋아하는 뭔가를하고 싶지 :

ALTER TABLE dbo.[Prices] 
ALTER COLUMN [AdjPrice] AS (CASE WHEN [AdjFactor] = 0 THEN 0 ELSE [Price]/[AdjFactor] END) 

을하지만이 올바르지 않습니다. 이것이 가능하거나 다른 해결책이있는 경우 도움을 주시면 감사하겠습니다.

+1

어떤 열 순서입니까? – MartW

+2

열 순서는 SQL Server에서 전혀 관계가 없습니다. 왜 보존해야합니까? 드롭하고 다시 만드는 것이 유일한 방법입니다. –

+1

열 순서에 따라 쿼리를 작성하는 경우 중지하십시오. –

답변

19

불행히도 먼저 열을 삭제하지 않으면이 작업을 수행 할 수 없습니다.

From MSDN

:

ALTER COLUMN에
명명 된 열을 변경하도록 지정합니다. 호환성 수준이 65 이하인 경우 ALTER COLUMN을 사용할 수 없습니다. 자세한 내용은 sp_dbcmptlevel (Transact-SQL)을 참조하십시오.

  • 계산 열이나 열 계산에 사용 :

    • 수정 컬럼은 다음 중 하나가 될 수 없다.

+0

그러나 임시 테이블을 사용하여 계산 열 데이터를 보존 할 수 있습니다 (이 대답에서 설명) (http://stackoverflow.com/a/23134891/1193596). – Amicable

+0

@Amicable은 더 이상 계산 된 열이 아니므로 완전히 다른 경우와 제한 집합입니다. –

0

NO

가 계산되는 경우, 큰 거래를 삭제하고 다시 추가 무엇인가? 그것은 PERSISTED이고 백만 줄이 있습니까?

0

나는 밖으로 떨어 뜨리지 않고이 열을 변경할 수 있다고 생각하지 않습니다. 그래서 열을 놓은 다음 새 열을 추가하십시오.

다른 방법을 찾으면 알려주세요.

-4

의 제로 오류 0 해당 열에있는 경우는, 널을 반환합니다

SELECT 
(100/NULLIF(0, 0)) AS value 

을 사용하여 분열을 극복

대신 ALTER의를 사용하여 업데이트를 이동하기 쉬운 위의 예

계산 된 열의 3 차 정규화 읽기

0

주문을 유지해야하는 경우 데이터를 중복 테이블에 복사 한 다음 열 순서를 유지하도록 테이블을 다시 작성한 다음 복제 테이블의 데이터를 다시 복사하십시오.

아니요 활동 계속.

관련 문제