webentwicklung-frage-antwort-db.com.de

SQL-Spaltendatentyp von nvarchar in int

Kann der Datentyp eines Felds von nvarchar in int geändert werden?

alter table employee alter column designation int

ist das gültig? Wenn nicht, kann es auf andere Weise gemacht werden?

P.S: Ich benutze MS SQL Server 

13
Mohit Jain

Sie können versuchen, eine Alter-Tabelle zu erstellen. Wenn dies fehlschlägt, gehen Sie folgendermaßen vor:

  1. Erstellen Sie eine neue Spalte, die eine Ganzzahl ist:

ALTER TABLE tableName ADD newCol int;

  1. Wählen Sie die Daten aus der alten Spalte in die neue aus:

UPDATE tableName SET newCol = CAST(oldCol AS int) FROM tableName;

  1. Lass die alte Säule fallen
17
dcaswell

Dies ist nur möglich, wenn die Spalte keinen Wert oder kein Leerzeichen hat. Wenn Ihre Spalte einen Wert hat, der den Wert Nvarchar hat und Sie versuchen sollten, ihn in int zu konvertieren, wird ein Fehler ausgegeben. 

ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
10
S. S. Rawat
  1. Neue numerische Spalte hinzufügen.
  2. Kopieren Sie aus der alten Zeichenspalte in eine neue Spalte mit Beschnitt und Konvertierung.
  3. Alte Char Spalte fallen lassen.
  4. Benennen Sie die numerische Spalte in den alten Spaltennamen um.

Dies funktionierte für mich (mit Dezimalzahlen, aber ich denke, es wird mit Ints funktionieren):

alter table MyTable add MyColNum decimal(15,2) null
go
update MyTable set MyColNum=CONVERT(decimal(15,2), REPLACE(LTRIM(RTRIM(MyOldCol)), ',', '.')) where ISNUMERIC(MyOldCol)=1
go
alter table MyTable drop column MyOldCol
go
EXEC sp_rename 'MyTable.MyColNum', 'MyOldCol', 'COLUMN'
go
5
Alexandr

In nur 2 Schritten ist dies noch einfacher möglich

  1. Aktualisieren Sie die Spalte und setzen Sie alle nicht nummerischen Werte auf null, damit die Änderungen nicht fehlschlagen.

  2. Ändern Sie die Tabelle und setzen Sie den Typ auf int.

UPDATE employee
SET designation = (CASE WHEN ISNUMERIC(designation)=1 THEN CAST(CAST(designation AS FLOAT) AS INT)END )

ALTER TABLE employee
ALTER COLUMN designation INT

Dies setzt die Annahme voraus, dass die Spalten Nullen zulassen. Wenn nicht, muss dies auch behandelt werden. Beispiel: Wenn Sie die Spalte so ändern, dass sie Null zulässt, setzen Sie nach der Konvertierung in int alle Nullwerte auf 0, und ändern Sie die Tabelle so, dass Null nicht zulässig ist

3
  1. Erstellen Sie eine temporäre Spalte

    ALTER TABLE MYTABLE ADD MYNEWCOLUMN NUMBER(20,0) NULL;

  2. Kopiert und überträgt die Daten aus der alten Spalte in die neue

    UPDATE MYTABLE SET MYNEWCOLUMN=CAST(MYOLDCOLUMN AS NUMBER(20,0));

  3. Alte Spalte löschen

    ALTER TABLE MYTABLE DROP COLUMN MYOLDCOLUMN;

  4. Benennen Sie die neue um, damit sie mit der alten übereinstimmt.

    ALTER TABLE MYTABLE RENAME COLUMN MYNEWCOLUMN TO MYOLDCOLUMN;

2
Jorciney

Kannst du das versuchen?

alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;
0
Suresh