varchar(4000)   的長度是4000
點8000個字節

解决方案 »

  1.   

    如果视图的语句超过4000,它在syscomments表中是分几条记录来存储的你可以用下面的语句得到视图的完整代码
    sp_helptext '视图名'
      

  2.   

    在联机帮助上,对于syscomments表的说明上可以看到相关的解释(colid列的解释)
    syscomments
    包含每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的项。text 列包含原始 SQL 定义语句,其最大大小限制为 4 MB。该表存储在每个数据库中。重要  不应删除 syscomments 中的项。如果手工删除或修改 syscomments 中的项,则对应的存储过程将不能正常工作。若要隐藏或加密存储过程定义,请使用含有 ENCRYPTION 关键字的 CREATE PROCEDURE。 
    列名 数据类型 描述 
    id int 该文本适用的对象 ID。 
    number smallint 如果进行分组,则为过程分组内的号码。0 表示不是过程的项。 
    colid smallint 超过 4,000 个字符的对象定义的行序列号。 
    status smallint 仅限内部使用。 
    ctext varbinary(8000) SQL 定义语句的实际文本。 
    texttype smallint 0 = 用户提供的注释。
    1 = 系统提供的注释。
    4 = 加密的注释。 
    language smallint 仅限内部使用。 
    encrypted bit 表示过程是否已加密。 
    0 = 未加密。
    1 = 已加密。
     
    compressed bit 表示过程是否已压缩。 
    0 = 未压缩
    1 = 已压缩
     
    text nvarchar(4000) SQL 定义语句的实际文本。 
      

  3.   

    谢谢zjcxc(邹建),我现在就去试一试
      

  4.   

    --不太明白楼主写法的意义,应该是直接这样写就行了SELECT obj.name AS TABLE_NAME
    , com.text
    FROM sysobjects obj, syscomments com  
    WHERE permissions(obj.id) != 0 
    AND obj.xtype = 'V' 
    AND obj.id = com.id 
    AND Obj.Name = 'Test_2003'
      

  5.   

    To zjcxc(邹建):
       我用你说的办法 sp_helptext '视图名' 已经解决了我的问题,非常感谢。我获取获取“视图定义”的SQL语句是从SQLServer的系统视图 Information_schema.views中拷贝过来的,当时我对这个SQL语句也感到奇怪,但因为它是“系统视图”,所以我就原版引用了。你如果有空的话帮我分析分析Information_schema.views的视图定义为什么要那样写,多谢了。
      

  6.   

    select text from syscomments where id=object_id('titleview')
      

  7.   

    To 631799(杭州工人):
       你所提供的办法只能获取长度在4000的SQL定义文本。
      

  8.   

    请邹健帮我分析分析Information_schema.views的视图定义为什么要那样写,多谢了