SQL - 将列数据类型从varchar转换为bigint,具有依赖关系

时间:2017-02-23 10:50:46

标签: sql sql-server tsql

问题:
在不丢失任何数据的情况下,我怎么能:

#1。将列数据类型从Varchar转换为Bigint?

让我们说:

table1.my_ID =" 12345" //默认为varchar

变成:

table1.my_ID = 12345 //转换为bigint

#2。 ..如果我的表有很多依赖项,我怎么能这样做?

我尝试了ALTER TABLE和ALTER COLUMN:

ALTER TABLE [MY_DATABASE].[dbo].table1
ALTER COLUMN my_ID BIGINT

我得到了这些:

  

Msg 5074,Level 16,State 1,Line 1
  对象' PK_table1'取决于列' my_ID'。

  Msg 5074,Level 16,State 1,Line 1
  对象' FK_table2_table1'取决于列' my_ID'。

  Msg 5074,Level 16,State 1,Line 1
  对象' FK_table3_table1'取决于列' my_ID'。

  ..blah blah ..

  Msg 4922,Level 16,State 9,Line 1
  ALTER TABLE ALTER COLUMN my_ID因一个或多个而失败   对象访问此列。

请帮忙。

谢谢!

1 个答案:

答案 0 :(得分:0)

你走了:

CREATE TABLE A (
ID VARCHAR (10) NOT NULL ,
AA VARCHAR (10) NOT NULL
)
GO
CREATE TABLE #B (
ID BIGINT  NOT NULL ,
BB VARCHAR (10) NOT NULL
)
GO

INSERT INTO A VALUES ('123','AAA');

INSERT INTO #B 
SELECT CONVERT(BIGINT,ID) , AA FROM A;

SELECT * FROM A;
SELECT * FROM #B;

ALTER TABLE A
ALTER COLUMN ID BIGINT NOT NULL;

INSERT INTO A
SELECT * FROM #B;

SELECT * FROM A;
SELECT * FROM #B;

DROP TABLE #B;

或者您可以尝试:

CREATE TABLE A (
ID VARCHAR (10) NOT NULL ,
AA VARCHAR (10) NOT NULL
)
GO
INSERT INTO A VALUES ('123','AAA');

ALTER TABLE A
ADD C1 BIGINT ;

UPDATE A
SET C1 = (SELECT CONVERT(BIGINT , ID) FROM A);

SELECT * FROM A;

ALTER TABLE A
DROP COLUMN ID;

ALTER TABLE A
ALTER COLUMN C1 BIGINT NOT NULL;

ALTER TABLE A 
ADD CONSTRAINT PK_ID PRIMARY KEY (C1);

EXEC sp_rename 'A.C1' , 'ID' , 'COLUMN';