Примерно так:
CREATE PROCEDURE [dbo].[GetIntRowVersion]
(
@Id INT
,@Table NVARCHAR(128)
)
AS
BEGIN;
SET NOCOUNT ON;
DECLARE @rowVersion AS BINARY(8);
DECLARE @DynamicTSQL NVARCHAR(MAX);
IF @Id = 0
BEGIN;
SET @DynamicTSQL = N'SELECT @rowVersion = (SELECT MAX([RowVersion]) FROM ' + @Table + ')';
END;
ELSE
BEGIN;
SET @DynamicTSQL = N'SELECT @rowVersion = (SELECT TOP 1 [RowVersion] FROM ' + quotename (@Table) + ' WHERE Id = ' + CAST(@Id AS VARCHAR(12)) +');';
END;
EXEC sp_executesql @DynamicTSQL, N'@rowVersion AS BINARY(8) OUTPUT', @rowVersion = @rowVersion OUTPUT;
SELECT @rowVersion AS[rowVersion];
SET NOCOUNT OFF;
RETURN;
END;
Вам необходимо использовать хранимую процедуру, поскольку функциям не разрешено выполнять CRUD
операции над SQL таблицами и выполнять динамические c T- SQL операторы (если не являются SQL функциями CLR).
Вы также можете использовать OUTPUT
параметр процедуры.