it-swarm.com.de

Ändern der Größe einer Spalte, auf die von einer schemagebundenen Ansicht in SQL Server verwiesen wird

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?

124
Staelen

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.

57
Remus Rusanu
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)
256

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 -

  1. Öffnen Sie SSMS
  2. Verbinden Sie sich mit der Publisher-Datenbank
  3. befehl ausführen - ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. Dadurch wird die Spaltenbreite von 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 werden

Ich hoffe, das hilft allen, die danach suchen.

6
Devshish

Siehe diesen Link

Verkleinern oder Ändern einer MS SQL Server-Tabellenspalte mit Standardeinschränkung mithilfe von T-SQL-Befehlen

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

5
RRUZ

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 :)

2

Überprüfen Sie die Spaltenkollatierung. Dieses Skript ändert möglicherweise die Kollatierung in den Tabellenstandard. Fügen Sie dem Skript die aktuelle Kollatierung hinzu.

0
user3103989