У меня есть таблица истории, и я должен выбрать значения из этой таблицы в ColumnName, форме ColumnValue. Я использую SQL Server 2008, и я не был уверен, мог ли я использовать функцию ЦЕНТРА для выполнения этого. Ниже упрощенный пример того, что я должен выполнить:
Это - то, что я имею:
Схема таблицы
CREATE TABLE TABLE1 (ID INT PRIMARY KEY, NAME VARCHAR(50))
Схема таблицы “истории”
CREATE TABLE TABLE1_HISTORY(
ID INT,
NAME VARCHAR(50),
TYPE VARCHAR(50),
TRANSACTION_ID VARCHAR(50))
Вот данные из TABLE1_HISTORY
ID NAME TYPE TRANSACTION_ID
1 Joe INSERT a
1 Bill UPDATE b
1 Bill DELETE c
Я должен извлечь данные из TABLE1_HISTORY в этот формат:
TransactionId Type ColumnName ColumnValue
a INSERT ID 1
a INSERT NAME Joe
b UPDATE ID 1
b UPDATE NAME Bill
c DELETE ID 1
c DELETE NAME Bill
Кроме обновления до Enterprise Edition и усиление созданного в функциональности отслеживания изменений, каково Ваше предложение для того, чтобы выполнить эту задачу?
Можно попробовать использовать UNION
Test Data
DECLARE @TABLE1_HISTORY TABLE (
ID INT,
NAME VARCHAR(50),
TYPE VARCHAR(50),
TRANSACTION_ID VARCHAR(50))
INSERT INTO @TABLE1_HISTORY
SELECT 1, 'Joe', 'INSERT', 'a'
UNION ALL SELECT 1, 'Bill', 'UPDATE', 'b'
UNION ALL SELECT 1, 'Bill', 'DELETE', 'c'
SQL Statement
SELECT [TransactionID] = Transaction_ID
, [Type] = [Type]
, [ColumnName] = 'ID'
, [ColumnValue] = CAST(ID AS VARCHAR(50))
FROM @Table1_History
UNION ALL
SELECT [TransactionID] = Transaction_ID
, [Type] = [Type]
, [ColumnName] = 'NAME'
, [ColumnValue] = [Name]
FROM @Table1_History
ORDER BY TransactionID
, ColumnName