ورود

View Full Version : سوال: سوالی در مورد دستور update



hamidjalali
چهارشنبه 09 دی 1388, 13:17 عصر
ُسلام

یه سوالی داشتم ! به مشکلی برخوردم:افسرده:

چطوری میتونم بعد از اینکه معدل چند نفر رو بدست اوردم تویه view !

و بعد مثلا 10 تا معدل بدست میاد اون هارو رو بتوتم تویه یک جدول دیگه آپدیت کنم!؟(یک فیلد کاملا خالی آماده وجود داره)

در کل میخام بدونم جواب بدست آمده تویه یک view رو تویه یک جدول آپدیت کنم

هر کاری کردم نشد:ناراحت:

در صورتی که واضح نگفتم بگید تا دوباره بگم:افسرده:

ASKaffash
چهارشنبه 09 دی 1388, 13:37 عصر
سلام
برداشت من اینستکه پس از محاسبه تعدادی معدل میخواهید معدلها را در یک فیلد جدولی ذخیره کنید اگر این است بهترین راه trigger است

hamidjalali
چهارشنبه 09 دی 1388, 17:01 عصر
سلام
برداشت من اینستکه پس از محاسبه تعدادی معدل میخواهید معدلها را در یک فیلد جدولی ذخیره کنید اگر این است بهترین راه trigger است

بله همینه که شما میگید.

میشه یه کمکی بکنید ؟

AminSobati
چهارشنبه 09 دی 1388, 18:41 عصر
سلام دوست عزیزم،
چرا از Update یا دستور Merge استفاده نمیکنین؟

hamidjalali
جمعه 11 دی 1388, 12:55 عصر
سلام دوست عزیزم،
چرا از Update یا دستور Merge استفاده نمیکنین؟

سلام

میتونید کمک کنید؟ من با درستور update نتونستم!

ممنون میشم اگه کمک کنید...

محمد سلیم آبادی
جمعه 11 دی 1388, 14:47 عصر
سلام

میتونید کمک کنید؟ من با درستور update نتونستم!

ممنون میشم اگه کمک کنید...

اول از همه باید مشخص بشود که از چه نسخه ی SQL Server استفاده می کنین. و DDL و کد های خود را قرار بدهین.

من در ادامه برای هر نسخه یک راه حل ارائه می دهم:

2000: استفاده از Update استاندارد یعنی با کمک EXISTS Predicate و Correlated Scalar Subquery در عبارت UPDATE. (با این فرض که Update غیر استاندارد در این نسخه پشتیبانی نمی شود)

2005: استفاده از Update غیر استاندارد یعنی Update بر اساس Join.

2008: استفاده از Merge.

ASKaffash
شنبه 12 دی 1388, 08:50 صبح
بله همینه که شما میگید.

میشه یه کمکی بکنید ؟

سلام
این یک نمونه ساده :
این Script جداول :


CREATE TABLE [dbo].[ChildTBL] (
[A1] [bigint] NULL ,
[B1] [numeric](6, 2) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[MainTBL] (
[A1] [bigint] NOT NULL ,
[A2] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
[A3] [numeric](6, 2) NULL
) ON [PRIMARY]

این هم یک trigger که روی MainTBL عمل معدل گیری را محاسبه می کند :


Create Trigger SetAvg On MainTBL
After Insert,Update
As
Update MainTBL
Set A3=(Select Convert(Numeric(6,2),Avg(B1)) From ChildTBL Where A1=MainTBL.A1)
Where A1 In (Select A1 From Inserted)

hamidjalali
شنبه 12 دی 1388, 14:22 عصر
اول از همه باید مشخص بشود که از چه نسخه ی SQL Server استفاده می کنین. و DDL و کد های خود را قرار بدهین.

من در ادامه برای هر نسخه یک راه حل ارائه می دهم:

2000: استفاده از Update استاندارد یعنی با کمک EXISTS Predicate و Correlated Scalar Subquery در عبارت UPDATE. (با این فرض که Update غیر استاندارد در این نسخه پشتیبانی نمی شود)

2005: استفاده از Update غیر استاندارد یعنی Update بر اساس Join.

2008: استفاده از Merge.

2000 استفاده میکنم.:لبخندساده:




سلام
این یک نمونه ساده :
این Script جداول :


CREATE TABLE [dbo].[ChildTBL] (
[A1] [bigint] NULL ,
[B1] [numeric](6, 2) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[MainTBL] (
[A1] [bigint] NOT NULL ,
[A2] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
[A3] [numeric](6, 2) NULL
) ON [PRIMARY]
این هم یک trigger که روی MainTBL عمل معدل گیری را محاسبه می کند :


Create Trigger SetAvg On MainTBL
After Insert,Update
As
Update MainTBL
Set A3=(Select Convert(Numeric(6,2),Avg(B1)) From ChildTBL Where A1=MainTBL.A1)
Where A1 In (Select A1 From Inserted)

ممنون

الان تست میکنم ببینم میشه یانه!

ولی دستور هاش برام تازگی داره:لبخند: