Ich versuche, die Größe einer Spalte in SQL Server mit zu ändern:
ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL
wobei die Länge von Addr1
ursprünglich 40
war.
Es schlug fehl, was zu diesem Fehler führte:
The object 'Address_e' is dependent on column 'Addr1'.
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access
this column.
Ich habe versucht, sich darüber zu informieren, und es scheint, dass einige Ansichten auf diese Spalte verweisen und es scheint, dass SQL Server tatsächlich versucht, die Spalte zu löschen, die den Fehler ausgelöst hat.
Address_e
ist eine Ansicht, die vom vorherigen DB-Administrator erstellt wurde.
Gibt es eine andere Möglichkeit, die Größe der Spalte zu ändern?
Die Ansichten werden wahrscheinlich mit der Option WITH SCHEMABINDING erstellt. Dies bedeutet, dass sie explizit verbunden sind, um solche Änderungen zu verhindern. Sieht so aus, als ob das Schablonieren funktioniert hat und Sie daran gehindert hat, diese Ansichten zu brechen, glücklicher Tag, was? Wenden Sie sich an Ihren Datenbankadministrator und bitten Sie ihn, die Änderung vorzunehmen, nachdem die Auswirkungen auf die Datenbank festgestellt wurden.
Von MSDN :
SCHEMABINDING
Bindet die Ansicht an das Schema der zugrunde liegenden Tabelle (n). Wann SCHEMABINDING wird angegeben, die Basis Tabelle oder Tabellen können nicht in .__ geändert werden. ein Weg, der die Ansicht beeinflussen würde Definition. Die Sichtdefinition selbst muss zuerst geändert werden oder auf .__ fallen gelassen werden. Abhängigkeiten von der Tabelle entfernen, die soll geändert werden.
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)
Wenn jemand in SQL Server 2008 "die Spaltenbreite der replizierten Tabelle erhöhen" möchte, müssen Sie die Eigenschaft "replicate_ddl=1
" nicht ändern. Folgen Sie einfach den folgenden Schritten -
ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
varchar(x)
auf varchar(22)
erhöht. Dieselbe Änderung können Sie auch beim Abonnenten sehen (Transaktion wurde repliziert). Daher muss die Replikation nicht neu initialisiert werdenIch hoffe, das hilft allen, die danach suchen.
Siehe diesen Link
die Lösung für ein solches SQL Server-Problem wird sein
Löschen oder Deaktivieren der DEFAULT-Einschränkung für die Tabellenspalte.
Datentyp der Datenspalte und/oder Datengröße ändern.
Erneutes Erstellen oder Aktivieren der Standardeinschränkung für die SQL-Tabellenspalte.
Tschüss
folgendes funktioniert mit der Version des Programms, das ich verwende: möglicherweise auch für Sie.
Ich werde nur die Anweisung und den Befehl platzieren, die dies tun. Klasse ist der Name der Tabelle. Sie ändern es in der Tabelle mit dieser Methode. nicht nur die Rückkehr zum Suchprozess.
die Tischklasse anzeigen
select * from class
Ändern Sie die Länge der Spalten FacID (als "faci") und der Klassennummer (als "Classnu" bezeichnet), um die gesamten Beschriftungen anzupassen.
alter table class modify facid varchar (5);
alter table class modify classnumber varchar(11);
tabelle erneut anzeigen, um den Unterschied zu sehen
select * from class;
(Führen Sie den Befehl erneut aus, um den Unterschied zu sehen.)
Dies ändert die tatsächliche Tabelle für immer, aber zum besseren.
P.S. Diese Anweisungen habe ich als Hinweis für die Befehle erstellt. Dies ist kein Test, kann aber helfen :)
Überprüfen Sie die Spaltenkollatierung. Dieses Skript ändert möglicherweise die Kollatierung in den Tabellenstandard. Fügen Sie dem Skript die aktuelle Kollatierung hinzu.