2013-09-10 2 views
2

У меня есть таблица в SQL Server 2008, как это:проблема Таблицы в SQL Server 2008

Column  DataType 
----------------------- 
FID   numeric(18, 0) 
Name  varchar(50) 
DOB   datetime 
MobileNo numeric(18, 0) 
EmailId  varchar(50) 
add1  varchar(50) 
add2  varchar(50) 
add3  varchar(50) 
Pincode  numeric(18, 0) 
UpdateDate datetime 

В этой таблице FID должна быть изменена на varchar(50) без падения (удаления) таблицы ..

Как чтобы сделать это, а также FID устанавливается в качестве первичного ключа в таблице выше, а также в качестве внешнего ключа к другим таблицам

+1

'FID' числовой сейчас - *** почему *** Вы хотите сделать это' VARCHAR (50) 'вместо этого? Похоже на ** очень плохую идею ** .... номер должен ** НЕ ** быть сохранен в столбце 'varchar'! Также: если вы измените это, вам также придется обновлять ** все ** связанные таблицы, которые имеют отношение внешнего ключа к этой таблице ... вы действительно хотите это сделать? –

+0

Его заказ от более высокой власти изменить FID на varchar..they нужен FID как MU123 .. вместо 123 –

+1

Не можете ли вы просто добавить отдельный вычисляемый столбец типа 'ALTER TABLE dbo.YourTable ADD FID2 AS 'MU '+ CAST (FID AS VARCHAR (20))) 'и пусть этот столбец« FID »один? –

ответ

0

Tools->Options->designers->(Unmark)Prevent saving changes that require table recreation

+0

Спасибо, что это сработало –

0
Right click table -> Design -> Change the numeric(18, 0) to varchar(50) -> Save 

Он будет просить confirmati поскольку изменение одного типа данных на другой удаляет определенные значения точности.

Лучшей практикой является сохранение уникальных номеров ключей Primary и foriegn. Но вы также можете выбрать уникальные значения кода, которые являются значениями varchar

И еще одно: изменение типа данных поля первичного ключа автоматически изменяет тип данных всех полей реляционного внешнего ключа в других таблицах.

+0

И снова: поскольку вы меняете тип данных первичного ключа ** этой таблицы **, вы также ** должны ** обновлять ** ВСЕ ** таблицы, ссылающиеся на него! –

+1

В SQL Server 2008 он автоматически изменяется. Любое изменение в реляционном поле также меняет все связанные поля. Я попробовал, и это сработало. – Nisha

+0

Обычно я не обновляю свои производственные базы данных в визуальном дизайнере таблиц ... если вы делаете это со сценарием, вы также должны помнить об этом со всеми связанными таблицами - вручную –

1

Как я уже сказал, я оставил бы столбец FID так, как он есть - иначе у вас будет эффект ряби на всей вашей модели данных, и это действительно не то, что вы хотите сделать.

Что вы можете сделать это: создать новый отдельный столбец, содержащий новый префикс, который «hgiher ups» настолько отчаянно нужен, и объединяет его с значением FID, но это отдельный столбец, и вы не Не нужно вообще менять какие-либо ссылки.

ALTER TABLE dbo.YourTable 
ADD FID2 AS 'MU' + CAST(FID AS VARCHAR(20)) PERSISTED 

При этом, вы не получите VARCHAR набраны новый столбец с именем FID2, которые будут иметь значение, как MU1, MU2 ..... и так далее - автоматически, никаких изменений необходимы, не грязные таблицы Воссоздания и копирование данных ... это просто работает!

+0

не обязательно должен быть MU все время, когда персонаж может измениться .. просто в этом случае, как реализовать –

+0

@Shreyastg: иметь столбец 'Префикс', где вы храните префикс, а затем объединяете' Префикс' и 'FID' в новый столбец .... –

+0

извините, что упомянул об этом в конце концов. Я использую asp.net с C#, и FID генерируется из самого кода. В базе данных я просто использую для целей хранения. –

Смежные вопросы