View Full Version : اشکال این پروسجر من کجاست
rezaei manesh
یک شنبه 10 اردیبهشت 1385, 09:19 صبح
سلام
من می خوام یک پروسجر بنویسم و برای جداول مشابه از اون استفاده کنم برای این کار نام جدول و نام فیلد ها رو به عنوان آرگمان ورودی می برم اما نمی دونم اشکال کار کجاست (اصلا این روش ، روش درستی هست؟)
این هم کد پروسیجرم:
CREATE PROCEDURE spIsLucked (@intID INT,@strIdName nvarchar (15),@strTblName nvarchar (15), @isLuck bit OUTPUT)
AS
IF Execute( ' EXISTS (SELECT ' + @strIdName + ' FROM ' + @strTblName + ' WHERE ' + @strIdName + ' = ' + @intID ')')
BEGIN Execute('
UPDATE ' + @strTblName + '
SET RowLuck = 1
WHERE ' + @strIdName + ' = ' + @intID + '
SET ' + @isLuck + '=0'
)
END
ELSE
BEGIN
SET @isLuck = 1
END
GO
ببخشید اگه تو قالب کد نگذاشتم آخه بلد نیستم
Kamyar.Kimiyabeigi
یک شنبه 10 اردیبهشت 1385, 11:51 صبح
CREATE PROCEDURE spIsLucked (@intID INT,
@strIdName nvarchar (15),
@strTblName nvarchar (15),
@isLuck bit OUTPUT)
AS
Execute(
'IF EXISTS (SELECT ' + @strIdName +
' FROM ' + @strTblName +
' WHERE ' + @strIdName + ' = ' + @intID + ')' +
'BEGIN ' +
' UPDATE ' + @strTblName +
' SET RowLuck = 1 ' +
' WHERE ' + @strIdName + ' = ' + @intID +
' SET ' + @isLuck + '=0' +
' END ' +
' ELSE ' +
' BEGIN ' +
' SET ' + @isLuck + ' = 1 '+
' END ')
GO
rezaei manesh
یک شنبه 10 اردیبهشت 1385, 12:23 عصر
سلام اقا دست گلت درد نکنه
ظاهرا مشکل اصلی من این بود که باید کل مقادیر رو تو exec می گذاشتم
با تشکرات
rezaei manesh
یک شنبه 10 اردیبهشت 1385, 13:51 عصر
سلام آقا حل نمی شد که
خطا نمی ده اما دستورات اجرا هم نمیشن ؟
هیچ فرقی میان قرار دادن متغیری که رشته ای نست با متغیر رشته ای و متغیری که نام فیلد ها و غیره هست نه مقدار وجود نداره؟
چند خط دستور داخل یک بلوک رو چکار می کنه(برای مثال همین دو دستور آپدیت و ست کردن یک متغیر در یک دستور شرطی؟
Kamyar.Kimiyabeigi
یک شنبه 10 اردیبهشت 1385, 14:25 عصر
CREATE PROCEDURE spIsLucked (@intID INT,
@strIdName NVARCHAR (15),
@strTblName NVARCHAR (15),
@isLuck BIT OUTPUT)
AS
DECLARE @Script VARCHAR(2000)
SET @Script =
('IF EXISTS (SELECT ' + @strIdName +
' FROM ' + @strTblName +
' WHERE ' + @strIdName + ' = ' + CAST(@intID AS NVARCHAR(100)) + ')' +
'BEGIN ' +
' UPDATE ' + @strTblName +
' SET RowLuck = 1 ' +
' WHERE ' + @strIdName + ' = ' + CAST(@intID AS NVARCHAR(100)) +
' SET ' + @isLuck + ' = 0 ' +
' END ' +
' ELSE ' +
' BEGIN ' +
' SET ' + @isLuck + ' = 1 '+
' END ')
EXECUTE(@Script)
GO
من فراموش کردم که متغییر intID@ که از نوع int هست رو cast کنم
rezaei manesh
یک شنبه 10 اردیبهشت 1385, 15:06 عصر
سلام
آقا باز هم نشد ؟
من اینجا یک متغیر از نوع بیت هم دارمکه باید مقدار 0 یا 1 درون آن قرار بدم فکر کنم سر این گیر میده؟
من یک جدول به نام rank و 2 فیلد به نام rank , id rank دارم که باید چک بشه؟
این خطا رو می ده!
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '0'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '0'.
Kamyar.Kimiyabeigi
دوشنبه 11 اردیبهشت 1385, 09:36 صبح
CREATE PROCEDURE spIsLucked (@intID INT,
@strIdName NVARCHAR (15),
@strTblName NVARCHAR (15))
AS
DECLARE @Script VARCHAR(2000)
SET @Script =
('IF EXISTS (SELECT ' + @strIdName +
' FROM ' + @strTblName +
' WHERE ' + @strIdName + ' = ' + CAST(@intID AS NVARCHAR(100)) + ')' +
'BEGIN ' +
' UPDATE ' + @strTblName +
' SET RowLuck = 1 ' +
' WHERE ' + @strIdName + ' = ' + CAST(@intID AS NVARCHAR(100)) +
' RETURN 0 ' +
' END ' +
' ELSE ' +
' BEGIN ' +
' RETURN 1 ' +
' END ')
EXECUTE(@Script)
GO
rezaei manesh
دوشنبه 11 اردیبهشت 1385, 17:08 عصر
کار نمی کنه؟
شما تویه آنالایزر کوئری امتهان کردید؟
می گه 2تا خروجی در یک استیت منت نمیشه
من اونو به این شکل تغییر دادم که اجرا می شه اما مقدار Null را بر می گردونه؟؟؟؟
CREATE PROCEDURE spIsLucked(@intID INT,
@IdName NVARCHAR (15),
@TblName NVARCHAR (15),@HasExit nVARCHAR(3)output)
AS
DECLARE @Script VARCHAR(2000)
DECLARE @hasExit1 nVARCHAR(3)
SET @Script =
('IF EXISTS (SELECT ' + @IdName +
' FROM ' + @TblName +
' WHERE ' + @IdName + ' = ' + CAST(@intID AS NVARCHAR(100)) + ') and Rowluck =0' +
'BEGIN ' +
' UPDATE ' + @TblName +
' SET RowLuck = 1 ' +
' WHERE ' + @IdName + ' = ' + CAST(@intID AS NVARCHAR(100)) +
' set '+ @hasExit1+'=1' +
' END ' +
' ELSE ' +
' BEGIN ' +
' set ' +@hasExit1+'=0 ' +
' END '+
'set ' + @HasExit +'=' + @hasExit1+
'return '+ @HasExit
)
EXECUTE(@Script)
GO
در ضمن یکی بهم بگه چطوری کدها رو تو قسمت مخصوص کد بذارم
Kamyar.Kimiyabeigi
چهارشنبه 13 اردیبهشت 1385, 08:24 صبح
دوست عزیز برای کد نویسی از دکمه # استفاده کنین.
در مورد SP نیز چون دارین از EXECUTE استفاده میکنین اگر از متغییر و یا TEMP TABLE استفاده کنین فقط در همون SESSION قابل دسترسی هست.
شما زمانی که RowLuck را برابر یک قرار میدین آیا همین برای شما کافی نیست و نشان دهنده این نیست که IF EXISTS شما برقرار شده؟
rezaei manesh
شنبه 16 اردیبهشت 1385, 12:48 عصر
سلام
فکر نکنم چون اگه دقت کنی نتیجه این sp در نهایت همیشه rowluck من برابر1 هست یا از قبل 1 بوده یا SP اون 1 کرده من می خوام همین مورد رو توی برنامه بدونم.
rezaei manesh
دوشنبه 18 اردیبهشت 1385, 09:37 صبح
سلام
آقا مشکل من حل شد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.