PDA

View Full Version : سلکت از چند تیبل در پروسیجر



mhamedm2008
پنج شنبه 06 فروردین 1394, 01:30 صبح
سلام دوستان
من یک پروسیجر برای انتخاب از دو تا تیبل نوشتم.
ولی هر کارمی کنم خطا میگیره
مشکل از کجاست ؟

alter proc sp_ADV_loud
@ser int,
@sp_ADV_load nvarchar(100) output

as
begin
select @sp_ADV_load = (adv.ReadDate, adv.ser, user1.nam_user)
FROM adv LEFT OUTER JOIN user1 ON adv.be = user1.id
WHERE (adv.ser = @ser)
end

پیغام خطا


Msg 102, Level 15, State 1, Procedure sp_ADV_loud, Line 7
Incorrect syntax near ','.

SabaSabouhi
پنج شنبه 06 فروردین 1394, 09:22 صبح
سلام دوستان
من یک پروسیجر برای انتخاب از دو تا تیبل نوشتم.
ولی هر کارمی کنم خطا میگیره
مشکل از کجاست ؟

alter proc sp_ADV_loud
@ser int,
@sp_ADV_load nvarchar(100) output

as
begin
select @sp_ADV_load = (adv.ReadDate, adv.ser, user1.nam_user)
FROM adv LEFT OUTER JOIN user1 ON adv.be = user1.id
WHERE (adv.ser = @ser)
end

پیغام خطا


Msg 102, Level 15, State 1, Procedure sp_ADV_loud, Line 7
Incorrect syntax near ','.

سلام
شما نمی‌تونی چند ستون رو در یک متغیر قرار بدی، اگه هم‌چنین نیتی داری
باید اون‌ها رو توسط تابع Convert به رشته حرفی تبدیل کنی و با عمل‌گر «+» اون‌ها رو به هم بچسبونی.

صبا صبوحی

mhamedm2008
پنج شنبه 06 فروردین 1394, 11:52 صبح
به صورت زیر تغییر دادم
ولی با هم همون اررور رو میده.حالا که دیگه توی یک متغیر نمی ریزم.فقط سلکت انجام میدم

alter proc sp_ADV_loud
@ser int

as
begin
select ([adv.ReadDate], [adv.ser], [user1.nam_user])
FROM adv LEFT OUTER JOIN user1 ON adv.be = user1.id
WHERE (adv.ser = @ser)
end

حتی به صورت زیر هم تغییر دادم.اینجا در ذخیره پروسیجر خطا نمی گیره.ولی وقتی از توی برنامه پروسیجر را فراخوانی می کنم باز هم پیغام زیر رو میده

alter proc sp_ADV_loud
@sp_ADV_loud nvarchar(max) output

as
begin
declare @temp nvarchar(300);
set @temp =N'select ([adv.ReadDate], [adv.ser], [user1.nam_user]) FROM adv LEFT OUTER JOIN user1 ON adv.be = user1.id WHERE adv.ser =3'
EXECUTE SP_EXECUTESQL @temp, N'@sp_ADV_loud nvarchar(max) output', @sp_ADV_loud OUTPUT
end



Incorrect syntax near ','.

SabaSabouhi
جمعه 07 فروردین 1394, 15:11 عصر
سلام
چرا این‌قدر مساله‌ رو می‌پیچونی؟
اول این که برای بدست آوردن خروجی عموماً از SP استفاده نمی‌شه.
دوم این که به‌تره بجای این که یک رشته برگردونی، به تعداد ستون‌ها پارامتر از نوع OUTPUT داشته باشه
و سوم این که اگه هم اصرار داری خروجی به شکل رشته برگردونده بشه. به این شکل عمل کن:


SELECT @Result = Convert( varchar( 20), Column1 ) + ', ' + Convert( varchar( 20), Column2 )
FROM MyTable




در این صورت Result@ حاوی مقدار ستون‌های مورد نظر با جداکننده‌ی «,» هست. که به راحتی با Split کردن می‌تونی به ستون‌ها دسترسی داشته باشه.
اما باز هم تکرار می‌کنم SP برای Select گرفتن نیست. از روش مناسب استفاده کن که نه کار تولید نرم‌افزار رو سخت کنی و نه تو پشتیبانی دچار مشکل بشی.

صبا صبوحی