ورود

View Full Version : کپی کردن مقادیر یک سطر بر روی یکی از سطرهای جدول دیگر



b.paseban
چهارشنبه 20 دی 1391, 19:08 عصر
سلام بر دوستان.
سه تا جدول دارم برای نمایش دادن اسامی نویسندگان یک مقاله .
جدول اول به اسم Article_Article من شامل سطرهای ArticleID و Title و description
جدول دوم به اسم Addes_Article من شامل سطرهای AddedID و ArticleID و Name
جدول سوم به اسم Articlebet من شامل سطرهای ArticleBetID و AddedID و ArticleID .
جدول اول من برای قرار دادن متن و تیتر مقاله بکار میره.
جدول دوم من اسامی نویسندگان مقاله رو در بر داره.
جدول سوم من برای برقرار کردن ارتباط بین دو جدول اول هست.(برای نمایش نویسندگان مقالات)
با استفاده از کوئری زیر من سطرهای هر سه جدول رو میخوندم (البته با استفاده از یه فیلد که تو هر سه تا جدول مشترکه یعنی AddedID )


ALTER Procedure [dbo].[sp_Addes_Article_SelectAllTbl]
@ArticleID int
As
Begin
select * from Article_Article inner join Articlebet on Article_Article.ArticleID =Articlebet.ArticleID
inner join Addes_Article on Articlebet. AddedID=Addes_Article. AddedID
where Article_Article.ArticleID=@ArticleID
End

حالا یه تغییر جدید تو جدول اول بوجود اوردم که یک سطر به اسم AddedNames رو به جدول اضافه می کنه.برای اینکه اسامی نویسندگان رو دیگه از جدولهای دیگه نخونم.برای سطرهای جدید (که تازه میخواد وارد دیتابیس بشه) مشکلی وجود نداره ولی من میخوام برای سطرهای قبلی از جدول اول توی سطر جدید (AddedNames) مقادیر مربوطه رو کپی کنم.
برای مثال در هنگام وجود کوئری فوق :


جدول Article_Article
ArticleID Title Description
1 اولين توضيح
2 دومين توضيح
3 سومين توضيح
4 چهارمين توضيح

جدول Addes_Article
AddedID ArticleID Name
1 null علي
2 null رضا
3 null حسين
4 null حميد

جدول Articlebet
ArticlebetID ArticleID AddedID
1 1 1
2 1 2
3 2 1
4 2 3

که مثلا با وارد کردن ArticleID=1 اسامی علی و رضا و با وارد کردن ArticleID=2 اسامی علی و حسین نمایش داده خواهد شد.
حالا من میخوام که با حذف این کوئری و با استفاده از سطر جدید اضافه شده به جدول (AddedNames) اسامی رو از جدول دوم به جدول اول منتقل کنم.
چطوری میشه که مقادیر سطر Name از جدول دوم رو به AddedNames به جدول اول منتقل کنم.البته با توجه به کلید اصلی که نمایانگر ارتبا بین سه جدول هست.

b.paseban
چهارشنبه 20 دی 1391, 22:07 عصر
جواب رو پیدا کردم ولی بعد از جایگزینی جدید انجام شده حروف به شکل ؟؟؟؟؟؟؟ در آمدند.
باید چکار کرد؟
کد:


update ar
set AddedNames = STUFF( (SELECT ',' + ad.Name
FROM TBL_ARTICLEBET as ab
JOIN Tbl_Addes_Article as ad
on ad.AddedID = ab.AddedID
WHERE ab.ArticleID = ar.ArticleID
FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
,1, 1, '')
FROM TBL_ARTICLE as ar;

select * from TBL_ARTICLE;

محمد سلیم آبادی
پنج شنبه 21 دی 1391, 15:10 عصر
در کوئریتان varchar را به nvarchar تبدیل کنید ببینید مشکل حل میشود یا نه.