سلام
خوبین؟
میشه با Store Procedure کارهایی مثل Insert , delete, Update رو انجام داد؟
یعنی تو یه Store Procedure تعریف کنم و تو برنامم اون Store Procedure رو صدا کنم؟
مرسی
سلام
خوبین؟
میشه با Store Procedure کارهایی مثل Insert , delete, Update رو انجام داد؟
یعنی تو یه Store Procedure تعریف کنم و تو برنامم اون Store Procedure رو صدا کنم؟
مرسی
اصولي ترين روش اجراي (تقريبا) هر نوع دستور SQLي ، نوشتن اون بصورت يك SP و صدا زدن اون از طرف برنامه است.
مشکت چیه برا نوشتن Store procedure
من دوستورات رو مینویسم ولی کار نمیکنه!
پیغام SuccessFull میده ولی کار نمیکنه
روند كلي كار رو ميگم:
يك 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, ...
مرسی
مناین کارها رو انجام دادم
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
مشکل من اینه که کار نمیکنه
مثلا تو کد بالا جدول رو خالی نمیکنه
يعني چي كار نميكنه؟ در صورتيكه اين SP توي ديتابيس ذخيره شده كد زير رو اجرا كنيد ببينيد كار ميكنه يا نه.
USE [Test]
Exec [dbo].[N]
در صورت امكان نحوه اجراي اين SP رو هم توضيح و كدهاي مربوطه رو اينجا بذاريد.
سلام دوستان ميشه براي دستورات Insert , delete, Update يه نمونه SP استاندارد بزاريد ؟
اگه ميشه براي ايجاد USERدر SQL هم يه نمونه بزاريد خيلي ممنون
با تشكر
يك 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;
خيلي ممنون از راهنمايي تون اگه ميشه توضيح بدين در موردش و اين كد چي رو بر مي گردونه
return @SerialNoTMP
دوست عزيز حالا ميشه توضيح بدين كه چطور اين sp ها را فراخاني كنم با مقدار
با سلام
نمونه 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
سلام
من فقط با دلفي كار ميكنم و ميتوانم كمكت كنم .
مقدار بازگشتي شماره سريال ركورد اضافه شده را برميگرداند . در من در برنامه هايم پس از اضافه كردن ركورد به يك تيبل همان ركورد را در حالت انتخاب شده در يك گريد نشان ميدهم تا كاربر به كارش مطمئن شود . در ضمن خط شماره 80 بايد به اين صورت اصلاح شود
set @SerialNoTMP =@@identity
سعيد سميعي
سلام
من این دستور را در C# نوشتم اجرا هم میشه dataGradeview هم اونا نشون میده.
اما مشکل من اینه که فقط تو dataGradeview هست و هیچی تو اصل پایگاه داده ذخیره نمیشه.
با سلام این یک نمونه برنامه ساخت sp در sql server و فراخوانی sp در سی شارپ
عملیات درج،ویرایش،حذف
لینک دانلود>>Test_StoredProcedure.rar
اگر کارتو راه انداخت ممنون میشم از دکمه تشکر استفاده کنی
موفق باشی