SQL Server 2000에서 텍스트 또는 NText 필드를 업데이트하는 방법
-
03-07-2019 - |
문제
그래서 텍스트 필드를 업데이트해야합니다. 아래에 사용될 때 업데이트 명령문이나 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
로컬 변수가 유형 텍스트가 될 수없는 경우 어떻게해야합니까? (SSQL Server 2005가 있다면 Varchar (Max)를 사용하지만 그렇지 않습니다.
해결책
대신 updatetext를 사용해보십시오
WRITETEXT MyTable.MyField @ptrval @Data1
UPDATETEXT MyTable.MyField @ptrval 8000 NULL @Data2
삽입 오프셋은 0 기반이므로 8000은 8001st 문자에 쓸 것입니다. NULL 값은 insert_offset 위치에서 기존 텍스트의 끝까지 모든 데이터를 삭제하는 값으로 삭제 오프셋이 NULL입니다.
ref : 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 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"은 "Test"데이터베이스의 정수 필드 일뿐입니다.