【问题标题】:SQL-Server: change data type IF it's a bigintSQL-Server:如果它是 bigint,则更改数据类型
【发布时间】:2017-02-10 10:43:05
【问题描述】:

我正在尝试将 colyumn 的数据类型从 bigint 更改为 int。我知道如何执行 alter 语句以及如何查找当前分配给它的数据类型:

SELECT data_type
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table_Name' AND COLUMN_NAME = 'ColumnName'

但是我不知道如何在 if 语句中执行此操作。我只需要更改当前为 bigint 的数据类型。

该表中没有行,因此移动数据目前不是问题。

非常感谢您的帮助,在此先感谢!

【问题讨论】:

  • 运行使用表名和列名发布的查询时会得到什么输出?
  • 今天的提示:总是有一个脚本来从头开始创建您的数据库。由于您没有数据,请调整该脚本并重新创建数据库。
  • @ChetanRanpariya 查询返回一列“data_type”和一个值 bigint

标签: sql sql-server type-conversion


【解决方案1】:

无需使用IF 条件,在Where 子句中添加BIGINT 过滤器。试试这样的

DECLARE @sql VARCHAR(8000)=''

SET @sql = (SELECT 'alter table ' + Quotename(TABLE_NAME)
                   + ' alter column ' + Quotename(COLUMN_NAME)
                   + ' int ' + CASE WHEN IS_NULLABLE = 'yes' THEN ' NULL ' ELSE ' NOT NULL ' END
            FROM   INFORMATION_SCHEMA.COLUMNS
            WHERE  TABLE_NAME = 'Table_Name'
                   AND COLUMN_NAME = 'ColumnName'
                   AND DATA_TYPE = 'bigint') 

Exec (@sql)

如果数据类型不是BIGINT,那么将没有什么可以执行

【讨论】:

  • 我尝试了几种不同的答案组合,但是我似乎没有找到正确的组合,它似乎对我不起作用,但是我想出了用 IF 做到这一点的方法声明,不知道之前发生了什么,但我只是坚持下去。 @Prdp我只是想知道,使用IF或您建议的方式是否有一些优点/缺点?谢谢!
猜你喜欢
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多