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の値は、insert_offset位置から既存のテキストの終わりまでのすべてのデータを削除するため、削除オフセットはnullです。

参照: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 に答える