2015-03-02 27 views
7

chcę zmodyfikować nazwę kolumny do nowej nazwy występującej w tabeliZmiana nazwy kolumny bez łamania skryptów i procedur przechowywanych

ale tutaj problemu Chcę ręcznie zmodyfikować obecny column name w Triggers lub SP's.

Czy jest lepszy sposób to zrobić.

Aby rename am kolumna za pomocą tego

sp_RENAME 'Tablename.old_Column', 'new_column' , 'COLUMN'; 

podobnie jak mogę zrobić to za triggers lub SP's.? bez otwierania każdego skryptu?

+5

Możesz zmienić nazwę kolumny, a następnie dodać obliczoną kolumnę z poprzednią nazwą kolumny i zmienić wyzwalacze i procedury przechowywane w czasie wolnym. –

+0

Możesz spróbować uzyskać kod skryptu z tabel sys, zastąpić go i przekompilować w jednym kroku za pomocą skryptu, ale jeśli nie ma zbyt wielu obiektów, wolę to zrobić, otwierając każdy skrypt ze względu na poprawność. – jean

+0

Również w MS-SQL możesz użyć 'alter table dbo.tbBase alter column [OriginalName] UNIQUEIDENTIFIER not null GO' – jean

Odpowiedz

3

Cóż, istnieje grono 3rd narzędzi firm, które są obiecujące tego typu „bezpiecznej zmiany nazwy”, niektóre za darmo, a niektóre nie są:

  • ApexSQL ma free tool na to, jak MWillemse napisał jego odpowiedź,
  • RedGate ma komercyjne narzędzie o nazwie SQLPrompt, które również ma bezpieczny tytuł do zmiany nazwy, jednak nie jest to darmowe.
  • Firma Microsoft ma dodatek do studio graficznego o nazwie SQL Server Data Tools (lub SSDT w wersji skróconej), jak napisał Dan Guzman w swoim komentarzu.

muszę powiedzieć, że nigdy nie próbowałem żadnej z tych konkretnych narzędzi dla danego zadania, ale mam pewne doświadczenie z SSDT a niektóre z produktów RedGate i uważam je za bardzo dobre narzędzia. Nic nie wiem o ApexSQL.

Inną opcją jest, aby spróbować i napisać skrypt SQL samodzielnie, jednak istnieje kilka rzeczy, aby wziąć pod uwagę przed rozpoczęciem:

  • Czy Twój stół jest dostępny bezpośrednio z zewnątrz z serwerem sql? Chodzi mi o to, czy jest możliwe, że niektóre oprogramowanie wykonuje polecenie sql bezpośrednio na tym stole? Jeśli tak, możesz złamać go, gdy zmienisz nazwę tej kolumny, a żadne narzędzie sql nie pomoże w tej sytuacji.
  • Czy Twoje umiejętności obsługi skryptów sql są naprawdę dobre? Uważam się za dość doświadczonego z serwerem sql, ale myślę, że napisanie takiego skryptu wykracza poza moje umiejętności. Nie to jest dla mnie niemożliwe, ale prawdopodobnie za dużo czasu i wysiłku zajmie mi coś, co mogę dostać za darmo.

Jeżeli zdecydujesz się napisać samemu, istnieje kilka artykułów, które mogą pomóc w tym zadaniu:

pierwsze, Microsoft oficjalnej dokumentacji sys.sql_expression_dependencies.
Po drugie, artykuł o nazwie Different Ways to Find SQL Server Object Dependencies, napisany przez 13-letnie doświadczenie DBA, i ostatni, ale nie najmniej, a related question na stronie administratora bazy danych StackExchange.

Można oczywiście pójść w bezpieczny sposób, jak sugerował Gordon Linoff w swoim komentarzu, lub użyć synonimów takich jak dane dotyczące miejsca przeznaczenia zasugerowanych w jego odpowiedzi, ale wtedy trzeba będzie ręcznie zmodyfikować wszystkie zależności kolumn ręcznie, oraz z tego, co rozumiem, tego właśnie chcesz uniknąć.

1
  1. Zmiana nazwy kolumny tabeli
  2. Usuwanie kolumny tabeli Keys
  3. Alter Table

najlepiej wykorzystać sposób bazy danych projektów w Visual Studio. Patrz ten łączy

link 1

link 2

1
  1. można zrobić, co sugeruje @GorDon.

  2. Oprócz tego, można także grać z tym zapytaniem,

wybierz o.name, sc. * Od sys.syscomments sc wewnętrzna przyłączyć sys.objects o na sc.id = o.object_id gdzie sc.text like „% oldcolumnname%”

to zwróci listę wszystkich proc i trigger.Also można zmodyfikować filtr, aby uzyskać dokładny list.then to będzie bardzo łatwe do edycji ,ręcznie.

Ale cokolwiek wybierzesz, nie po prostu upuść starą kolumnę. Aby być bezpiecznym, nawet zachować kopię zapasową.

0

Możesz chcieć zastąpić ten tekst w definicji. Będziesz jednak potrzebować dedykowanego połączenia administratora w serwerze sql. Wersje różnią się również konfiguracją dedykowanego połączenia administratora. Ustawianie parametru startowego przez dodanie; -T7806 w trybie zaawansowanym. Dodając Admin: przed servername po zalogowaniu. Do tego czasu możesz modyfikować wartość definicji.