PDA

View Full Version : انجام کارهای Delete , Insert, Update با Store Procedure



pishraft
شنبه 07 اسفند 1389, 11:50 صبح
سلام
خوبین؟
میشه با Store Procedure کارهایی مثل Insert , delete, Update رو انجام داد؟
یعنی تو یه Store Procedure تعریف کنم و تو برنامم اون Store Procedure رو صدا کنم؟
مرسی

Reza_Yarahmadi
شنبه 07 اسفند 1389, 12:31 عصر
اصولي ترين روش اجراي (تقريبا) هر نوع دستور SQLي ، نوشتن اون بصورت يك SP و صدا زدن اون از طرف برنامه است.

ehsanara
شنبه 07 اسفند 1389, 12:50 عصر
مشکت چیه برا نوشتن Store procedure

pishraft
شنبه 07 اسفند 1389, 13:01 عصر
من دوستورات رو مینویسم ولی کار نمیکنه!
پیغام SuccessFull میده ولی کار نمیکنه

Reza_Yarahmadi
شنبه 07 اسفند 1389, 13:36 عصر
روند كلي كار رو ميگم:
يك SP با ساختار كلي زير بنويسيد و بعد از انتخاب ديتابيس مورد نظر از منوي SQL Server ، روي دكمه Executeكليك كنيد.

Create Proc ProcName
--Declare Params
AS
--Sql Commands
بعد از زدن دكمه Execute در صورتيكه مشكلي نداشته باشه SP بصورت كامل ذخيره ميشه.
كارهاي سمت SQL Server تموم شد و براي اجراي اين SP سمت برنامه كافيه به جاي CommandText نام SP ايجاد شده رو بنويسيد‌ و CommandType رو از نوع StoredProcedure قرار بديد، در صورت داشتن پارامتر ورودي پارامتر ها رو بهش معرفي و مقدار دهي كنيد. در صورتي هم كه بخوايد اين SP رو سمت SQL Server اجرا كنيد (براي تست و يا استفاده از اين SP‌ در SPهاي ديگه) بصورت زير اين كار رو انجام بديد

Exec SPName 'Value1', Value2, ...

pishraft
شنبه 07 اسفند 1389, 14:06 عصر
مرسی
مناین کارها رو انجام دادم


USE [Test]
GO
/****** Object: StoredProcedure [dbo].[N] Script Date: 02/26/2011 14:18:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[N]
As
BEGIN
DELETE
FROM TestTbl
END


مشکل من اینه که کار نمیکنه
مثلا تو کد بالا جدول رو خالی نمیکنه

Reza_Yarahmadi
شنبه 07 اسفند 1389, 14:39 عصر
يعني چي كار نميكنه؟ در صورتيكه اين SP توي ديتابيس ذخيره شده كد زير رو اجرا كنيد ببينيد كار ميكنه يا نه.

USE [Test]
Exec [dbo].[N]
در صورت امكان نحوه اجراي اين SP رو هم توضيح و كدهاي مربوطه رو اينجا بذاريد.

farzinf
دوشنبه 23 اسفند 1389, 18:27 عصر
سلام دوستان ميشه براي دستورات Insert , delete, Update يه نمونه SP استاندارد بزاريد ؟
اگه ميشه براي ايجاد USER‌در SQL هم يه نمونه بزاريد خيلي ممنون

با تشكر

saeed.samiee
چهارشنبه 25 اسفند 1389, 14:22 عصر
يك sp در پيوست موجود است .

من تقريبا براي همه تيبل هايم از همين روش استفاده ميكنم .

قسمت هاي غير فعال شده براي ذخيره اطلاعات قبلي ركورد در تيبل ديگري است تا امكان رديابي تغييرات باشد كه فعلا بكار شما نمي آيد .

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[SpASTAssistsUpdate]
@Mode as tinyint,
@SerialNo as int,
@FirstName as varchar(50),
@LastName as varchar(50),
@SurName as varchar(50),
@Address as varchar(100),
@Region as tinyint,
@TelHome as varchar(50),
@TelWork as varchar(50),
@TelMobile as varchar(50),
@TelFax as varchar(50),
@Email as varchar(100),
@WebSite as varchar(100),
@JobRel as varchar(100)='',
@Desc as varchar (100),
@UserCode as char(10)

AS
declare @SerialNoTMP int
--declare @UserCodeOld char(10)
--declare @UserNameOld varchar(50)
--declare @UserName varchar(50)
begin

--set @UserCodeOld = ( select UserCodeAST from ASTAssists where SerialNoAST = @SerialNo)
--set @UserNameOld = ( select NamePUC from PUBUserCodes where CodePUC = @UserCodeOld )
--set @UserName = ( select NamePUC from PUBUserCodes where CodePUC = @UserCode )
/*
set @FirstName = dbo.FixPersianString(@FirstName)
set @LastName = dbo.FixPersianString(@LastName)
set @SurName = dbo.FixPersianString(@SurName)
set @Address = dbo.FixPersianString(@Address)
set @SurName = dbo.FixPersianString(@SurName)
set @JobRel = dbo.FixPersianString(@JobRel)
set @Desc = dbo.FixPersianString(@Desc)
*/
if @Mode = 1 begin
INSERT INTO ASTAssists
(
FirstNameAST,
LastNameAST,
SurNameAST,
AddressAST,
RegionAST,
TelHomeAST,
TelWorkAST,
TelMobileAST,
TelFaxAST,
EmailAST,
WebSiteAST,
JobRelAST,
DescAST,
UserCodeAST,
TimeStamsAST
)
VALUES
(
@FirstName,
@LastName,
@SurName,
@Address,
@Region,
@TelHome,
@TelWork,
@TelMobile,
@TelFax,
@Email,
@WebSite,
@JobRel,
@Desc,
@UserCode,
getdate()
)
set @SerialNoTMP = @SerialNo
end else if @Mode = 2 begin
/*
INSERT INTO ASTAssistsBak
( SerialNoAstBAST,
FirstNameBAST,
LastNameBAST,
SurNameBAST,
AddressBAST,
RegionBAST,
TelBAST,
DescBAST,
UserNameOldBAST,
TimeStamsOldBAST ,
StatusBAST,
UserNameBAST,
TimeStamsBAST )
( select
SerialNoAST,
FirstNameAST,
LastNameAST,
SurNameAST,
AddressAST,
RegionAST,
TelHomeAST,
DescAST ,
@UserNameOld,
TimeStamsAST,
@Mode,
@UserName ,
getdate()
from ASTAssists where SerialNoAST = @SerialNo)
*/
UPDATE ASTAssists SET
FirstNameAST = @FirstName,
LastNameAST = @LastName,
SurNameAST = @SurName,
AddressAST = @Address,
RegionAST = @Region,
TelHomeAST = @TelHome,
TelWorkAST = @TelWork,
TelMobileAST = @TelMobile,
TelFaxAST = @TelFax,
EmailAST = @Email,
WebSiteAST =@WebSite,
JobRelAST =@JobRel,
DescAST = @Desc,
UserCodeAST = @UserCode,
TimeStamsAST = getdate()
WHERE
SerialNoAST = @SerialNo
set @SerialNoTMP = @SerialNo
end else if @Mode = 3 begin
begin TRANSACTION
/*
INSERT INTO ASTAssistsBak
( SerialNoAstBAST,
FirstNameBAST,
LastNameBAST,
SurNameBAST,
AddressBAST,
RegionBAST,
TelBAST,
DescBAST,
UserNameOldBAST,
TimeStamsOldBAST ,
StatusBAST,
UserNameBAST,
TimeStamsBAST )
( select
SerialNoAST,
FirstNameAST,
LastNameAST,
SurNameAST,
AddressAST,
RegionAST,
TelHomeAST,
DescAST ,
@UserNameOld,
TimeStamsAST,
@Mode,
@UserName ,
getdate()
from ASTAssists WHERE SerialNoAST = @SerialNo)
*/
DELETE ASTAssists WHERE SerialNoAST = @SerialNo
if @@error = 0 begin
COMMIT
end begin
ROLLBACK
end
set @SerialNoTMP = (select top 1 SerialNoAST from ASTAssists where SerialNoAST < @SerialNo order by SerialNoAST desc)
end
return @SerialNoTMP
end;

farzinf
پنج شنبه 26 اسفند 1389, 10:59 صبح
خيلي ممنون از راهنمايي تون اگه ميشه توضيح بدين در موردش و اين كد چي رو بر مي گردونه
return @SerialNoTMP

دوست عزيز حالا ميشه توضيح بدين كه چطور اين sp ها را فراخاني كنم با مقدار

ircast
شنبه 06 فروردین 1390, 12:47 عصر
با سلام

نمونه SP ساده رو گذاشتم امیدوارم کمکتون کنه

Insert:

CREATE PROCEDURE Insert_Student
@Scode NVARCHAR(15)
,@SFName NVARCHAR(50)
,@SLName NVARCHAR(50)
,@SPName NVARCHAR(50)
,@Snationalcode NVARCHAR(15)
,@ID INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Student
(SCode, SFName, SLName, SPName, Snationalcode)
VALUES (@Scode, @SFName, @SLName, @SPName,@Snationalcode)
SET @ID=scope_identity()

END

Update:
CREATE PROCEDURE Update_Student
@Scode NVARCHAR(15)
,@SFName NVARCHAR(50)
,@SLName NVARCHAR(50)
,@SPName NVARCHAR(50)
,@Snationalcode NVARCHAR(15)
,@ID INT
AS
BEGIN
SET NOCOUNT ON;
UPDATE Student SET
SCode=@Scode
,SFName =@SFName
,SLName =@SLName
,SPName =@SPName
,Snationalcode =@Snationalcode

WHERE Id=@ID

END

Delete:

CREATE PROCEDURE Delete_Student
@ID INT
AS
BEGIN
SET NOCOUNT ON;

DELETE FROM Student

WHERE Id=@ID

END

saeed.samiee
شنبه 06 فروردین 1390, 13:50 عصر
سلام
من فقط با دلفي كار ميكنم و ميتوانم كمكت كنم .
مقدار بازگشتي شماره سريال ركورد اضافه شده را برميگرداند . در من در برنامه هايم پس از اضافه كردن ركورد به يك تيبل همان ركورد را در حالت انتخاب شده در يك گريد نشان ميدهم تا كاربر به كارش مطمئن شود . در ضمن خط شماره 80 بايد به اين صورت اصلاح شود
set @SerialNoTMP = @@identity
سعيد سميعي

فانوس1
پنج شنبه 04 دی 1393, 23:31 عصر
سلام
من این دستور را در c# نوشتم اجرا هم میشه dataGradeview هم اونا نشون میده.
اما مشکل من اینه که فقط تو dataGradeview هست و هیچی تو اصل پایگاه داده ذخیره نمیشه.:گریه:

حسین.کاظمی
جمعه 05 دی 1393, 00:07 صبح
با سلام این یک نمونه برنامه ساخت sp در sql server و فراخوانی sp در سی شارپ
عملیات درج،ویرایش،حذف

لینک دانلود>>126889

اگر کارتو راه انداخت ممنون میشم از دکمه تشکر استفاده کنی

موفق باشی