PDA

View Full Version : سوال: مشکل در تعریف متغییر از نوع ntext?



SYNDROME
چهارشنبه 29 خرداد 1387, 21:00 عصر
با سلام
من یک SP نوشته ام که عملیاتی را انجام می دهد.
در داخل آن یک متغییر از نوع nvarchar(4000 ) تعریف کرده ام.
داخل متغییر فوق دستورات select را نوشته ام و آن را به شکل
Exec Sp_Executesql @SQL اجرا می کنم.
حالا چون دستورات من بیشتر از 4000 کاراکتر است در داخل متغییر فوق جا نمی شود.
متغییر از نوع varchar تعریف می کنم ولی اجازه اجرا داده نمی شود.
نوعی که می تواند به من کمک کند ntext است ولی نمی توانم یک متغییر از این نوع تعریف کنم.
باید از چه روشی برای اجرای دستور فوق استفاده کنم؟
با تشکر

SYNDROME
پنج شنبه 30 خرداد 1387, 21:49 عصر
کسی راه حلی ندارد تا من بتوانم یک دستور select را که از 4000 کاراکتر بیشتر است اجرا کنم؟
ممنون می شوم بنده را راهنمایی کنید.
با تشکر

hdv212
جمعه 31 خرداد 1387, 01:58 صبح
چرا از nvarchar(max) استفاده نمیکنی ؟

SYNDROME
جمعه 31 خرداد 1387, 10:22 صبح
چرا از nvarchar(max) استفاده نمیکنی ؟
باز هم مقدار رشته بیشتر از متغییر فوق است.
متغیری که من می خواهم باید تقریبا 10000 کاراکتر باشد.
کسی از دوستان می تواند راه حل بهتری پیشنهاد بدهد.
موفق باشید

AminSobati
جمعه 31 خرداد 1387, 10:33 صبح
nvarchar max تا یک میلیارد کاراکتر ظرفیت داره. البته در SQL Server 2000 این Type وجود نداره. شما در کدوم Version کار میکنید؟

DataMaster
جمعه 31 خرداد 1387, 10:37 صبح
من یک sp با یک پارامتر ورودی از نوع nText تعریف کردم و داخل اون دستور sp_executeSql رو با پارامتر ورودی اجرا کردم مشکلی تداشتم

SYNDROME
جمعه 31 خرداد 1387, 15:26 عصر
nvarchar max تا یک میلیارد کاراکتر ظرفیت داره. البته در SQL Server 2000 این Type وجود نداره. شما در کدوم Version کار میکنید؟
از 2005 استفاده می کنم.
دقیقاً همین کار را انجام دادم ولی جالب بود باز هم این رشته در آن جا نشد.
ولی باز هم تست می کنم
مجبور شدم از 2 تا رشته nvarchar(Max) استفاده کنم و از ستور Exec (@SQL1+@SQL2)
استفاده کنم.

من یک sp با یک پارامتر ورودی از نوع nText تعریف کردم و داخل اون دستور sp_executeSql رو با پارامتر ورودی اجرا کردم مشکلی تداشتم
من می خواستم از متغییر استفاده کنم تا کارام راجتر شود.
با تشکر از دوستان خود که همیشه بنده را راهنمایی می کنند.

AminSobati
جمعه 31 خرداد 1387, 21:56 عصر
شما باید String رو تبدیل کنید و بعد داخل متغیر بریزید. بعنوان مثال تفاوت این دو حالت در کد زیر نمایش داده میشه:


declare @x nvarchar(max)
set @x=replicate('@',10000)
select len(@x)
set @x=replicate(cast('@' as nvarchar(max)),10000)
select len(@x)

SYNDROME
شنبه 01 تیر 1387, 06:55 صبح
شما باید String رو تبدیل کنید و بعد داخل متغیر بریزید. بعنوان مثال تفاوت این دو حالت در کد زیر نمایش داده میشه:


declare @x nvarchar(max)
set @x=replicate('@',10000)
select len(@x)
set @x=replicate(cast('@' as nvarchar(max)),10000)
select len(@x)

با تشکر از آقا امین
اگر امکان دارد بگویید دستورات فوق چه کار می کنند.
cast برای تبدیل است ولی معنی '@' را نمی فهمم.
ویا replicate('@',10000) چه عملیاتی انجام می دهد.
با تشکر

AminSobati
شنبه 01 تیر 1387, 11:12 صبح
@ فقط یک کاراکتر نمونه هست که گفتیم 10000 بار تکرار بشه