View Full Version : نوشتن یک تابع که ورودی آن نام جدول و نام یه فیلده
mohammad diba
جمعه 14 مرداد 1390, 23:59 عصر
سلام بر دوستان و بزرگواران من می خواستم یه تابع بنویسم که نام جدول و نام یه فیلد مثلا فیلد ID را بگیره و یه واحد به اون ID اضافه کنه . حالا سوال من اینه که این روش امکان پذیر است؟
یوسف زالی
شنبه 15 مرداد 1390, 03:22 صبح
سلام.
declare @s varchar(4000); set @s = 'update ' + @tblname + ' set ' + @fieldname + ' += 1 ' -- afzudane ye vahed
exec(@s) -- ejra
mohammad diba
یک شنبه 16 مرداد 1390, 05:09 صبح
مرسی از پاسخ تون دوست عزیز
من نمی خوام آپدیت کنم می خوام یه تابع بنویسم که یک جدول بگیره و نام یه فیلد و یه واحد به بیشترین مقدار اون فیلد اضافه کنه نتیجه رو برگردونه.
Galawij
یک شنبه 16 مرداد 1390, 09:51 صبح
سلام دوست خوبم،
از آنجایی که دستور EXEC در تابع کار نمی کنه، شما از طریق نوشتن یک SP به این صورت مشکلتون حل می شه:
Create PROCEDURE [dbo].[SPName](@TableName nvarchar(255),@FieldName nvarchar(255))
AS
BEGIN
DECLARE @MaxNumberPlusOne bigint
DECLARE @SqlStr nvarchar(255)
SET @SqlStr='SELECT @MaxNumber=Max('+@FieldName+')+1 From '+ @TableName
EXECUTE sp_executesql @SqlStr,N'@MaxNumber Bigint Output',@MaxNumber = @MaxNumberPlusOne Output
SELECT @MaxNumberPlusOne
END
یوسف زالی
یک شنبه 16 مرداد 1390, 11:54 صبح
سلام.
همین کد رو برای کاری که می خواهید عوض کنید و در قالب یک SP ذخیره کنید.
alter procedure MaxNum
@TBLName varchar(20),
@FName varchar(20)
as
declare @x table(NUM int)
declare @z varchar(max)
set @z = 'select isnull((select MAX(' + @FName + ') from ' + @TBLName + '), 0) +1'
insert into @x
exec(@z)
return (select * from @x)
برای اجراش هم از این روش استفاده کنید:
declare @a int
exec @a = MaxNum 'salorders', 'osn'
-- @a is your number
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.