aebrs@yahoo.com
شنبه 20 اسفند 1390, 07:29 صبح
Function that get Table and field name as param and return Identity
با سلام
معمولا در کارها و جائیکه بخواهیم از کلید خودکار استفاده نکنیم، از تابع برای تعیین مقدار کلید استفاده میکنیم، من از این نوع تابع استفاده میکنم:
ALTER FUNCTION [dbo].[MaxIdLineMain]
( @Maxi int)
RETURNS INT
AS
BEGIN
DECLARE @MaxId int
Declare TreeCur Cursor
for select isnull(max(Id),0)+1 as Maxi from [dbo].[LineMain]
Open TreeCur
FETCH NEXT FROM TreeCur into @MaxId
RETURN @MaxId
END
اما اکنون می خواهم که این تابع را تغییر داده و تنها از یک تابع استفاده کنم و نام جدول و نام ستون را به آن ارجاع داده و تابع مقدار کلید را بازگرداند، که هنوز موفق نشده ام کد جدید به این صورت است :
ALTER FUNCTION [dbo].[MaxId]
(
@TableName varchar(50),
@FieldName varchar(50)
)
RETURNS INT
AS
BEGIN
DECLARE @MaxId int
Declare @TreeCur Cursor
EXEC sp_executesql
N'for select isnull(max(@FieldName),0)+1 as Maxi from [dbo].[@TableName] Open @TreeCur;',
N'@TreeCur cursor OUTPUT', @TreeCur OUTPUT
FETCH NEXT FROM @TreeCur into @MaxId
RETURN @MaxId
END
خواهشمند است شما هم کمک کنید
با تشکر
با سلام
معمولا در کارها و جائیکه بخواهیم از کلید خودکار استفاده نکنیم، از تابع برای تعیین مقدار کلید استفاده میکنیم، من از این نوع تابع استفاده میکنم:
ALTER FUNCTION [dbo].[MaxIdLineMain]
( @Maxi int)
RETURNS INT
AS
BEGIN
DECLARE @MaxId int
Declare TreeCur Cursor
for select isnull(max(Id),0)+1 as Maxi from [dbo].[LineMain]
Open TreeCur
FETCH NEXT FROM TreeCur into @MaxId
RETURN @MaxId
END
اما اکنون می خواهم که این تابع را تغییر داده و تنها از یک تابع استفاده کنم و نام جدول و نام ستون را به آن ارجاع داده و تابع مقدار کلید را بازگرداند، که هنوز موفق نشده ام کد جدید به این صورت است :
ALTER FUNCTION [dbo].[MaxId]
(
@TableName varchar(50),
@FieldName varchar(50)
)
RETURNS INT
AS
BEGIN
DECLARE @MaxId int
Declare @TreeCur Cursor
EXEC sp_executesql
N'for select isnull(max(@FieldName),0)+1 as Maxi from [dbo].[@TableName] Open @TreeCur;',
N'@TreeCur cursor OUTPUT', @TreeCur OUTPUT
FETCH NEXT FROM @TreeCur into @MaxId
RETURN @MaxId
END
خواهشمند است شما هم کمک کنید
با تشکر