问题:
在不丢失任何数据的情况下,我怎么能:
#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因一个或多个而失败 对象访问此列。
请帮忙。
谢谢!
答案 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';