У меня есть хранимая процедура, которая имеет несколько видов параметров, INT, VARCHAR, DateTime и т. Д. c ... Этот sp вставляет запись в таблицу журнала с параметрами, переданными в. Существуют разные таблицы журнала, три именно то, что называется, например, LogTbl1, LogTbl2 и LogTbl3. Этот sp пишет в LogTbl1, LogTbl2 или LogTbl3 в зависимости от параметра sp, который указывает, куда записывать. Я установил этот параметр как tinyint, и он принимает значения 0, 1 или 2. Затем в зависимости от переданного значения я создаю динамический запрос c для записи в соответствующую таблицу журнала, как показано ниже:
CREATE PROCEDURE [dbo].[spTraceLog]
@LogId int,
@param2 int,
@param3 int,
@param4 varchar(100),
@DateSent datetime,
@TargetTable tinyint = 0
AS
BEGIN
DECLARE @sqlCommand nvarchar(max)
DECLARE @tblName nvarchar(100)
SET @tblName = CASE @TargetTable
WHEN 0 THEN '[dbo].[LogTbl1]'
WHEN 1 THEN '[dbo].[LogTbl2]'
WHEN 2 THEN '[dbo].[LogTbl3]'
ELSE ''
END
IF @tblName <> ''
BEGIN
SET @sqlCommand =
'INSERT INTO ' + @tblName +
'([LogId]' +
',[param2]' +
',[param3]' +
',[param4]' +
',[Date]) ' +
'VALUES' +
'(@LogId' +
',@param2' +
',@param3' +
',@param4' +
',@DateSent)'
EXECUTE sp_executesql @sqlCommand
END
END
Так есть ли другой, более элегантный способ сделать это? Невозможно использовать перечисление в параметре sp @TargetTable?