2011-12-29 12 views
5

Próbuję zmienić pole tabeli - z pewnymi wierszami - od DateTime do DateTime2(3).Dlaczego SQL Server zmusza mnie do opuszczenia tabeli, aby móc zmienić pole z DateTime na DateTime2 (3)?

Ale SQL Server Management Studio skarży się, że upuściłem i ponownie utworzyłem tabelę.

Ale dlaczego?

Czy nie jest DateTime2(3) ma większą precyzję niż typ DateTime? Powinno być w porządku, nieprawdaż?

+1

Jakiego * systemu baz danych * używasz? – Lion

+4

@Lion "* Management Studio *" oznacza program SQL Server. – Yuck

+1

Zobacz: http://stackoverflow.com/questions/3896713/sql-server-management-studio-adding-moving-columns-require-drop-and-re-create –

Odpowiedz

6

W SSMS jest ustawienie, które pozwoli ci robić to, co chcesz. Menu-Narzędzia-Opcje-Projektanci-Zapobiegaj zapisywaniu zmian, które wymagają ponownego rozłożenia tabeli.

SSMS ma nawyk odtwarzania prawie wszystkich zmian, które robisz. Powinno być w porządku zmienianie tylko typu danych kolumny za pomocą czegoś takiego.

alter table TableName alter column ColName datetime2(3) 
3

Można to również zrobić bez przebudowywania tabeli (jak Management Studio robi to za kulisami).

ALTER TABLE T ALTER COLUMN D DateTime2(3) [NOT NULL] 

To będzie mniej intensywny zasobów z przodu, ale pozostawić „starego” kolumny w tyle stron danych tak będzie miało wpływ trwającego aż odbudować tabeli.

+0

nie wiedziałem, że o alter alter alter column. Nie mówię, że się mylicie, ale czy macie referencje? Dzięki! –

+1

@BenThul [Here's one] (http://sqlblog.com/blogs/kalen_delaney/archive/2006/10/13/alter-table-will-not-reclaim-space.aspx) –

+0

Dobre rzeczy. Nauczyłem się czegoś dzisiaj. –

Powiązane problemy