PDA

View Full Version : درج یک آرایه در جدول



farzane_t
شنبه 12 بهمن 1392, 17:57 عصر
سلام دوستان

فرض کنید آرایه ای داریم به این صورت :

asp.net,php,c#,vb
این آرایه در واقع کلمات کلیدی مربوط به مطلبی با pid=1 هست. جدولی دارم به اسم keyword که این کلمات داخلش هست.


keyword
--------------------------
kid key
--------------------------
1 asp.net
2 php
3 c#
4 vb


میخوام این آرایه به شکل زیر در جدولی به اسم p-tag درج بشه. مشکلم اینه که اولا باید بررسی بشه تمام عناصر این آرایه داخل جدول keyword وجود داره ، اگر وجود داشت درون جدول p-tag درج بشه :




------------------------
pid kid
------------------------
1 1
1 2
1 3
1 4


با C# میتونم انجامش بدم. اما میخوام تمام این عملیات داخل sql انجام بشه. امکانش هست ؟
ممنون میشم راهنماییم کنید.

N_D
یک شنبه 13 بهمن 1392, 08:45 صبح
دوست عزیز فکر کنم منظورت اینه که چطور یک رشته را تبدیل به جدول کنی.. من کد زیر رو برات میذارم و مابقی کار رو خودت انجام بده ..


Declare @XML XML ,@List nvarchar(4000)= 'asp.net,php,C#‎,vb'
SET @XML = '<T><F>'+REPLACE( @List,',','</F></T><T><F>')+'</F></T>'
SELECT Fld.value('F[1]','nvarchar(100)') as UnitName
FROM @XML.nodes('T')Tbl(Fld)

farzane_t
یک شنبه 13 بهمن 1392, 15:05 عصر
ممنون بابت پاسخگویی.
نه دوست من. سوال رو جور دیگه مطرح می کنم. جدولی دارم به اسم keyword که دادهای درونش هم مشخصه و گفتم قبلا. textboxی دارم که کاربر مثلا رشته زیر رو داخلش وارد می کنه :

asp.net,php,C#‎,vb,css
من باید این کلمات رو درون جدول دیگه ای به اسم p-tag وارد کنم. ولی قبلش باید بررسی کنم که asp.net و php و ... که کاربر وارد کرده در جدول keyword وجو داره یا نه. اگر اون کلمه وجود داشت درج کنه و اگر نبود اون کلمه رو برگدونه

farzane_t
سه شنبه 15 بهمن 1392, 08:30 صبح
راهی که میخواستم پیدا کردم :
Table-Valued Parameters (http://msdn.microsoft.com/en-us/library/bb675163%28v=vs.110%29.aspx)

حمیدرضاصادقیان
سه شنبه 15 بهمن 1392, 08:48 صبح
سلام.
شما از طریق TVP میتونید اینکارو بکنید ولی اگر به صورت رشته ارسال میکنید باید جوری رشته مورد نظر رو تفکیک کنید و به ستون تبدیل کنید که یک روش خاص داره و بعد میتونید کارهای مورد نظر رو روی اون داده ها انجام بدید.

starting
سه شنبه 15 بهمن 1392, 09:35 صبح
خیلی دشوار نیست. میشه برای این منظور از دستور LIKE کمک گرفت فقط عملگر سمت چپ باید پارامتر ورودی شما باشه که همون Comma Separated List هست، و عملگر سمت راستی نام ستونی است که کلیدواژه ها در اون مقیم شدن:


Create Procedure Test (@value Varchar(500))
AS
SELECT * FROM Keywords
WHERE ','+@value+',' LIKE ','+keys+',';

farzane_t
چهارشنبه 16 بهمن 1392, 17:33 عصر
آقای صادقیان میشه توضیح بیشتری بفرمایید؟ من این پروسیجر رو نوشتم ولی خطای 119 رو میده :


CREATE PROCEDURE [dbo].[InsertPaperTag]
(@dt AS PaperKeywordsType READONLY ,
@PID int)
AS
BEGIN
SET NOCOUNT ON;

INSERT dbo.PaperTags(PID,PKeyID)
SELECT @PID,PaperKeywords.PKeyID FROM @dt tvp
inner join PaperKeywords on PaperKeywords.PKeyword = tvp.PKeyword
END

farzane_t
چهارشنبه 16 بهمن 1392, 17:43 عصر
از کابر آرایه ای میگیرم مثلا به این شکل :

Asp.net,C#‎,css,php
من باید کل این آرایه رو بفرستم به sql . بررسی کنم عناصر آرایه داخل جدول PaperKeywords وجود داره یا نه. اگر وجود داره ، id رو به دست بیارم و با PID (id مطلبی که نوشته شده) داخل جدول PaperTags درج کنم.

از این مطالب هم کمک گرفتم اما نشد.

http://www.codeproject.com/Questions/631284/How-to-pass-an-array-to-SQL-SERVER-2008-stored-pro

http://msdn.microsoft.com/en-us/library/bb675163%28v=vs.110%29.aspx

http://www.aspdotnet-suresh.com/2012/09/pass-table-as-parameter-to-stored.html

اینم جداول و ارتباط بینشون :
http://upload7.ir/imgs/2014-02/63079942644404471328.png