Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 若nvarchar的长度为x,则修改它_Sql Server_Alter_Nvarchar - Fatal编程技术网

Sql server 若nvarchar的长度为x,则修改它

Sql server 若nvarchar的长度为x,则修改它,sql-server,alter,nvarchar,Sql Server,Alter,Nvarchar,我一直在对数据库进行更改,并正在创建一个脚本,以便它可以在原始数据库上运行,以继承我所做的所有更改 我需要更改NVARCHAR的长度,但在更改列之前要检查其长度。我有点纠结于语法,有人能帮我吗 SELECT LEN(colName) AS MyLength FROM tblName IF MyLength = 60 BEGIN ALTER TABLE tblName ALTER COLUMN colName nvarchar(140) NOT NULL END GO 如果我尝试

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

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


您需要将其定义为一个变量

declare @i int
select @i = len(colname) from table
但这无论如何都不起作用,因为它返回的是数据的长度,而不是作为varchar的列本身是可变的。请尝试查看sysobjects和syscolumns表或信息\u Schema.Columns

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

根据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
重申一下,使用MAXLEN只会给出列中最长字符串的长度,而不是允许的最大长度