我一直在更改数据库并创建一个脚本,以便它可以在原始数据库上运行,以继承我所做的所有更改。
我需要改变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'。
答案 0 :(得分:5)
试试这个:
IF (select max(LEN(colName)) from tblName) = 60
BEGIN
ALTER TABLE tblName
ALTER COLUMN colName nvarchar(140) NOT NULL
END
GO
答案 1 :(得分:4)
您需要将其定义为变量
declare @i int
select @i = len(colname) from table
但这无论如何都不会起作用,因为它返回数据的长度,而不是作为varchar的列本身就是可变的。尝试查看sysobjects
和syscolumns
表格或Information_Schema.Columns
代替
答案 2 :(得分: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())
只会给出列中最长字符串的长度,而不是最大允许长度!