2008-10-15 3 views
2

그래서 텍스트 필드를 업데이트해야합니다. 어느 쪽도 아니 UPDATE 문 또는 WRITETEXT 문 작업 때 로컬 변수가 텍스트를 입력 될 수 없을 때이 작업을 수행 할 수 있다고 생각 할수 있습니까SQL Server 2000에서 텍스트 또는 ntext 필드를 업데이트하는 방법

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 

이하로 사용하지? 대신

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

오프셋 삽입이 8천1번째 문자로 작성해야 제로 그래서 8000 기반

답변

5

하는 UPDATETEXT를 사용해보십시오 - (하지만 난 안 나는 SSQL 서버 2005이 있다면 나는) VARCHAR (최대를 사용합니다) . NULL 값은 insert_offset 위치에서 기존 텍스트의 끝까지 모든 데이터를 삭제하므로 delete 오프셋이 null입니다.

참조 : http://msdn.microsoft.com/en-us/library/ms189466.aspx

가 (당신이 NTEXT 필드 사용해야합니다) 당신이 당신의 블록 크기가 그 경우에 4000로 감소 될 필요가 있으므로 사용하는 반 VARCHAR 필드의 최대 용량은 nvarchar를 잊지 마세요 .

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

위의 근무하지만 먼저 길이를 계산했다 : 나는이 내일처럼 그것을 시도 있도록

2

값은 실제로 길이가 달라집니다

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

이유를 확실하지 매개 변수가 필요한 곳에 LEN()과 같은 함수를 사용할 수 없습니다.

0

힘든 시간을 보냈습니다.

긴 문자열 (사실 풍부한 텍스트 상자 내용)을 ntext feild에 저장하려고했습니다.

이 솔루션은 상당히 단순한 것으로 나타났습니다.

 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"은 ntext 필드 이름 "Text"를 포함하는 "Test"데이터베이스의 정수 필드입니다.

관련 문제