如何在不删除的情况下更改列 nvarchar 长度

新手上路,请多包涵

我正在尝试更改表“Post”中“Body”列的长度,如下所示:

 ALTER TABLE Post ALTER COLUMN Body nvarchar(8000) NOT NULL;

该列定义为 nvarchar(4000) ,它给了我这个错误:

消息 2717,级别 16,状态 2,第 1 行 给参数“正文”的大小 (8000) 超过了允许的最大值 (4000)。

原文由 Mário Tomé 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 971
2 个回答

改用 Max。如果该列被声明为 VARCHAR,8000 就可以了。

 ALTER TABLE Post ALTER COLUMN Body nvarchar(max) NOT NULL;

原文由 UnhandledExcepSean 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于约束,您可以使用以下

DECLARE @DEFCONSTRAINT VARCHAR(1000);
DECLARE @DropDFConstraitCmd  VARCHAR(1000);
DECLARE @AlterDFColumnCmd VARCHAR(1000);
DECLARE @CreateDFConstraitCmd VARCHAR(1000);
DECLARE @CONSTRAINT_SAYI NUMERIC;
SET @DEFCONSTRAINT=(SELECT name
                      FROM sys.sysobjects
                     WHERE type = 'D' AND OBJECT_NAME(parent_obj) = 'TABLENAME' and name like 'DF__TABLENAME__COLUMNNAME%');
SET @CONSTRAINT_SAYI=(SELECT count(*)
                      FROM sys.sysobjects
                     WHERE type = 'D' AND OBJECT_NAME(parent_obj) = 'TABLENAME' and name like 'DF__TABLENAME__COLUMNNAME%');
SET @DropDFConstraitCmd   = ' ALTER TABLE TABLENAME DROP CONSTRAINT ' +@DEFCONSTRAINT;
SET @AlterDFColumnCmd     = ' ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME nvarchar(max) NOT NULL';
SET @CreateDFConstraitCmd = ' ALTER TABLE TABLENAME ADD CONSTRAINT ' +@DEFCONSTRAINT + ' DEFAULT ('' '') FOR COLUMNNAME ';
if @CONSTRAINT_SAYI > 0
    exec (@DropDFConstraitCmd);
exec (@AlterDFColumnCmd);
exec (@CreateDFConstraitCmd);

原文由 Alper Akbulak 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进