2

所以我需要更新一个文本字段。UPDATE 语句或 WRITETEXT 语句在下面使用时都不起作用

CREATE TABLE MyTable (IDField int, MyField text)
INSERT INTO MyTable (IDField) SELECT 1

DECLARE @Data1 varchar(8000), @Data2 varchar(8000), @ptrval binary(16)

SELECT @Data1 = REPLICATE('1',8000)
SELECT @Data2 = REPLICATE('2',8000)

-- this sets MyField to string of only 8000 characters
UPDATE MyTable SET MyField = @Data1 + @Data2 WHERE IDField = 1 


SELECT @ptrval = TEXTPTR(MyField ) 
FROM MyTable 
WHERE IDField = 1 

-- this causes an error: Incorrect syntax near '+'.
--WRITETEXT MyTable.MyField @ptrval @Data1 + @Data2

当局部变量不能是 TEXT 类型时,我应该怎么做?(如果我有 SSQL Server 2005,我会使用 varchar(max) - 但我没有)

4

3 回答 3

5

尝试改用 UPDATETEXT

WRITETEXT MyTable.MyField @ptrval @Data1 
UPDATETEXT MyTable.MyField @ptrval 8000 NULL @Data2

插入偏移量从零开始,因此 8000 应该写入第 8001 个字符。删除偏移量为 null,因为 NULL 值删除从 insert_offset 位置到现有文本末尾的所有数据。

参考:http: //msdn.microsoft.com/en-us/library/ms189466.aspx

不要忘记 nvarchar(您应该与 ntext 字段一起使用)的最大容量是您正在使用的 varchar 字段的一半,因此在这种情况下您的块大小需要减少到 4000。

于 2008-10-15T10:26:53.427 回答
2

这些值的长度实际上会有所不同,所以我明天会这样尝试:

WRITETEXT MyTable.MyField @ptrval @Data1 
UPDATETEXT MyTable.MyField @ptrval Len(@Data1) NULL @Data2

以上工作,但我必须先计算长度:

WRITETEXT MyTable.MyField @ptrval @Data1
SET @Len = LEN(@Data1)
UPDATETEXT MyTable.MyField @ptrval @Len NULL @Data2

不知道为什么不能在需要参数的地方使用像 LEN() 这样的函数。

于 2008-10-15T11:27:36.020 回答
0

这个我很难受。

我试图将长字符串(实际上是富文本框内容)保存到 ntext 字段。

结果证明解决方案相当简单。

        SQLst = "UPDATE  Test SET Text = cast (@value as ntext)" & _
            " WHERE  Num = 3 "

        Debug.Print(SQLst.ToString)

        Dim cnn As New SqlServerCe.SqlCeConnection(Tcon)
        Dim cmd = New SqlCeCommand(SQLst, cnn)
        cmd.Parameters.AddWithValue("@value", strQuestionQUESTION)
        cnn.Open()
        cmd.ExecuteNonQuery()
        cnn.Close()

注意:strQuestionQUESTION 大约是 3000 个字符或格式化代码和文本。“Num”只是“Test”数据库中的一个整数字段,其中还包含 ntext 字段名称“Text”

于 2014-09-19T14:55:20.853 回答