text/ntext/image存储大容量字符串

解决方案 »

  1.   

    对于局部变量,可以使用多个varchar进行连接
      

  2.   

    大于8000字节的字符可以保存在text/ntext类型数据列中,使用readtext,writetext以及updatetext函数访问。
      

  3.   

    大于8000字节的字符可以保存在text/ntext类型数据列中,使用readtext、writetext以及updatetext函数访问、写入及更新。
      

  4.   

    但是在存储过程中,不能用text/ntext类型,用updatetext怎么更新该类型的数据列呢?
      

  5.   

    以操作TEXT列的标准函数 UPDATETEXT 实现对TEXT列数据的追加:
    ---------------------------------------------------------------------------------创建临时表,并将表头信息插入表中
    CREATE TABLE #tab_dest(c1 TEXT)
    INSERT INTO #tab_dest SELECT 'uid name'--声明过程变量
    DECLARE @uid VARCHAR(20),@name VARCHAR(40),@s VARCHAR(100),@len INT--以游标方式获取sysusers中数据,并以UPDATETEXT方式更新到临时表#tab_dest
    DECLARE t_cursor CURSOR FOR 
    SELECT uid,name FROM sysusersOPEN t_cursorFETCH NEXT FROM t_cursor INTO @uid,@nameWHILE @@FETCH_STATUS = 0
    BEGIN
        SELECT @len = DATALENGTH([c1]) FROM #tab_dest
        
        SET @s = CHAR(13)+@uid+' '+@name
        
        DECLARE @ptrval binary(16)
        
        SELECT 
            @ptrval = TEXTPTR(c1) 
        FROM 
            #tab_dest
        
        UPDATETEXT #tab_dest.[c1] @ptrval @len 0 @s
        
        FETCH NEXT FROM t_cursor INTO @uid,@name
    ENDCLOSE t_cursor
    DEALLOCATE t_cursor--查看更新结果
    SELECT C1 FROM #tab_dest
      

  6.   

    这是通过分割字符串来来实现更新一个大于8000的text类型吧?
    能不能直接将大于8000的string类型更新到text类型字段
      

  7.   

    1. 对于局部变量,可以使用多个varchar进行连接
    2. 可以利用sp_xml_preparedocument结合临时表实现:   USE NorthWindCREATE PROC GetRegions_XML 
    @empdata text
    AS DECLARE @hDoc int
    DECLARE @tbl TABLE(state VARCHAR(20))exec sp_xml_preparedocument @hDoc OUTPUT, @empdata   INSERT @tbl 
    SELECT StateName
    FROM OPENXML(@hDoc, 'root/States')   
    WITH (StateName VARCHAR(20))EXEC sp_xml_removedocument @hDoc   SELECT * FROM Suppliers
    WHERE Region IN (SELECT * FROM @tbl)/*
    declare @s varchar(100)
    set @s = '<root><States StateName = "LA"/>
    <States StateName = "MI"/> 
    <States StateName = "OR"/></root>'exec GetRegions_XML @s
    */