كيفية تحديث النص أو الحقل NTEXT في SQL Server 2000
-
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 2005 ملقم أود أن استخدام VARCHAR (كحد أقصى) - ولكن أنا لا)
المحلول
وحاول استخدام UPDATETEXT بدلا
WRITETEXT MyTable.MyField @ptrval @Data1
UPDATETEXT MyTable.MyField @ptrval 8000 NULL @Data2
ووإدراج تعويض صفر مستندا في ذلك 8000 أن تكتب إلى الطابع 8001st. حذف تعويض لاغيا باعتباره قيمة NULL حذف كافة البيانات من موقع insert_offset إلى نهاية النص الموجود.
المرجع: http://msdn.microsoft.com/en-us/ مكتبة / 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 حرفا أو رمز التنسيق والنص. "ارقام" هو مجرد حقل عدد صحيح في قاعدة البيانات "اختبار" التي تحتوي أيضا على اسم الحقل NTEXT "نص"