質問

したがって、テキストフィールドを更新する必要があります。以下で使用すると、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)を使用しますが、使用しません)

役に立ちましたか?

解決

代わりにUPDATETEXTを使用してみてください

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

挿入オフセットはゼロベースであるため、8000は8001番目の文字に書き込む必要があります。 NULLの値はinsert_offset位置から既存のテキストの終わりまでのすべてのデータを削除するため、削除オフセットはnullです。

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

nvarchar(ntextフィールドで使用する必要があります)には、使用しているvarcharフィールドの半分の最大容量があることを忘れないでください。その場合、ブロックサイズを4000に減らす必要があります。

他のヒント

値の長さは実際に異なるため、明日はこのようにしてみます:

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()のような関数を使用できない理由がわからない。

これで苦労しました。

長い文字列(実際にはリッチテキストボックスの内容)を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"も含むデータベース

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top