سؤال

ولذا أنا بحاجة لتحديث حقل النص. لا عبارة 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 "نص"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top