2

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

我需要更改 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”无效。

4

3 回答 3

5

试试这个:

IF (select max(LEN(colName)) from tblName) = 60
BEGIN
    ALTER TABLE tblName
    ALTER COLUMN colName nvarchar(140) NOT NULL
END
GO
于 2012-08-02T11:17:23.543 回答
4

您需要将其定义为变量

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

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

于 2012-08-02T11:16:59.943 回答
4

跟进 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

重申一下, usingMAX(LEN())只会给你列中最长字符串的长度,而不是最大允许长度!

于 2015-04-24T16:49:28.240 回答