【问题标题】:If length of nvarchar is x then alter it如果 nvarchar 的长度为 x 则更改它
【发布时间】:2012-08-02 11:14:56
【问题描述】:

我一直在对数据库进行更改并正在创建一个脚本,以便它可以在原始数据库上运行以继承我所做的所有更改。

我需要更改 NVARCHAR 的长度,但想在更改列之前检查它的长度。我在语法上有点挣扎,有人可以帮我吗?

SELECT LEN(colName) AS MyLength FROM tblName
IF MyLength = 60
BEGIN
    ALTER TABLE tblName
    ALTER COLUMN colName nvarchar(140) NOT NULL
END
GO

如果我尝试在 SQL Server Management Studio 中运行此查询,我会收到一条错误消息:

列名“MyLength”无效。

【问题讨论】:

    标签: sql-server alter nvarchar


    【解决方案1】:

    试试这个:

    IF (select max(LEN(colName)) from tblName) = 60
    BEGIN
        ALTER TABLE tblName
        ALTER COLUMN colName nvarchar(140) NOT NULL
    END
    GO
    

    【讨论】:

      【解决方案2】:

      你需要将它定义为一个变量

      declare @i int
      select @i = len(colname) from table
      

      但这无论如何都不起作用,因为它返回数据的长度,而不是列,它是一个 varchar,本质上是可变的。尝试查看 sysobjectssyscolumns 表或 Information_Schema.Columns 代替

      【讨论】:

        【解决方案3】:

        跟进 podiluska 的回答,您正在寻找的完整命令是:

        IF (SELECT [CHARACTER_MAXIMUM_LENGTH] FROM INFORMATION_SCHEMA.COLUMNS WHERE [COLUMN_NAME] = 'ColumnName' AND [TABLE_NAME] = 'TableName') < 140
        BEGIN
            ALTER TABLE [dbo].[TableName] ALTER COLUMN [ColumnName] NVARCHAR(140) NOT NULL
        END
        

        重申一下,使用MAX(LEN()) 只会为您提供列中最长字符串的长度,而不是允许的最大长度!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-30
          • 2020-03-02
          • 1970-01-01
          • 1970-01-01
          • 2017-06-27
          • 1970-01-01
          • 1970-01-01
          • 2013-07-14
          相关资源
          最近更新 更多