Если длина nvarchar равна x, измените ее

Я вносил изменения в базу данных и создаю сценарий, чтобы его можно было запускать в исходной базе данных для наследования всех внесенных изменений.

Мне нужно изменить длину 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".

3 ответа

Решение

Попробуй это:

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

Следуя ответу подилушки, вы ищете следующую команду:

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()) даст вам только длину самой длинной строки в столбце, а не максимально допустимую длину!

Вы должны определить это как переменную

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

Но это все равно не сработает, так как возвращает длину данных, а не столбец, который, будучи varchar, по своей природе является переменной. Попробуйте посмотреть на sysobjects а также syscolumns таблицы или Information_Schema.Columns вместо

Другие вопросы по тегам