检查列类型if语句

时间:2019-04-23 09:09:27

标签: tsql

如果列int是nvarchar,我想添加Id主键。我有一个模糊的想法怎么做:

DECLARE @columnType ... = SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
 TABLE_NAME = 'TempTable' AND 
 COLUMN_NAME = 'Id';
IF ISNUMERIC(@columnType)<>1
    ALTER TABLE TempTable ALTER COLUMN Id int IDENTITY(1,1), ADD PRIMARY KEY (Id);
ELSE
    ALTER TABLE TempTable ADD PRIMARY KEY (Id);

我不知道如何使它工作,但我认为我已经很接近了。

1 个答案:

答案 0 :(得分:1)

我已经做到了自己想要的。也许有人会从中受益:

IF 'Int' in (SELECT DATA_TYPE 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE 
    TABLE_NAME = 'TempTable' AND 
    COLUMN_NAME = 'Id')
    BEGIN
        ALTER TABLE TempTable ADD PRIMARY KEY (Id)
    END
ELSE
    BEGIN
        ALTER TABLE TempTable ADD Idd int IDENTITY (1,1)
        ALTER TABLE TempTable ADD PRIMARY KEY (Idd)
    END
GO

基本上,它检查列的类型是否为INT,如果是,则在ID列上添加主键。如果不是,它将创建新列Idd并将其设置为int主键。

非常具体的问题,也许有人会利用我的折磨。

编辑:检查Int是否为选定类型时出错。