SQL Server 2000でテキストまたはntextフィールドを更新する方法
-
03-07-2019 - |
質問
したがって、テキストフィールドを更新する必要があります。以下で使用すると、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"も含むデータベース