На форуме был вопрос автонумерации составного ключа.
Для TPS все решается просто: объявляется составной ключ Unique value, Auto Number.
При Insert первое поле = поле родителя, второе поле автонумеруется в пределах подчиненности.
По крайней мере так работает в приложении и я об этом даже не задумывался.
При переводе приложения на SQL так уже не получится. Писать процедуру автонумерации
для каждого такого случая не хочется. Решил сделать функцию, которая запускалась бы на
сервере и возвращала наибольшее значение второго поля составного ключа. Но так как
с SQL только начал знаний не хватает. Поэтому прошу помощи у 'Гуру' что там не так.

Код: Выделить всё
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ufnSetNextKey]
(
@TblNam [varchar(50)], -- Таблица
@FldNam1 [varchar(50)], -- 1-е поле составного ключа
@FldNam2 [varchar(50)], -- 2-е поле составного ключа
@ValFldNam1 [int] -- значение 1-го поля сост.ключа
)
RETURNS [int]
AS
BEGIN
DECLARE @v_ret [int];
@v_ret = SELECT MAX([@FldNam2]) FROM [@TblNam]
WHERE [@TblNam].[@FldNam1] = @ValFldNam1;
RETURN @v_ret; --найденное макс.значение 2-го поля сост.ключа
END;
GO