Если длина 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
вместо