Для конкретной задачи мне нужно сохранить идентификатор строки в таблице для ее доступа позже. Большинство этих таблиц НЕ имеют числовой идентификатор, а первичный ключ иногда состоит из нескольких полей. VARCHAR & INT комбинированный.Получить значение PRIMARY KEY во время SELECT в ORACLE
Фоновая информация: Таблицы-участники имеют триггер, сохраняющий события удаления, обновления и вставки в общем столбце «синхронизация» (Oracle v11). Каждые 15 минут запускается скрипт для обновления соответствующих таблиц в удаленной базе данных (SQL Server 2012).
Одним из решений, которые я придумал, было использование нескольких столбцов в этой таблице «sync», 3 столбца INT и 3 столбца VARCHAR. Таблица с 2 столбцами VARCHAR затем будет использовать 2 столбца VARCHAR в этой таблице «sync».
Лучшим решением было бы «выбрать» значение первичного ключа и сохранить его в этой таблице.
Пример:
CREATE TABLE [dbo].[Workers](
[company] [nvarchar](50) NOT NULL,
[number] [int] NOT NULL,
[name] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Workers] PRIMARY KEY CLUSTERED ([company] ASC, [number] ASC)
)
// Fails:
SELECT [PK_Workers], [name] FROM [dbo].[Workers]
UPDATE [dbo].[Workers] SET [name]='new name' WHERE [PK_Workers][email protected]
// Bad (?) but works:
SELECT ([company] + CAST([number] AS NVARCHAR)) PK, [name] FROM [dbo].[Workers];
UPDATE [dbo].[Workers] SET [name]='newname' WHERE ([company] + CAST([number] AS NVARCHAR))[email protected]
В [PK_Workers] терпит неудачу в этих запросах. Есть ли другой способ получить это значение без ручного комбинирования и литья индекса?
Или есть ли другой способ сделать это, что я не знаю?
В этом вопросе упоминается общая таблица 'sync'. Но ваш код не ссылается на такую таблицу. –
@GordonLinoff, таблица синхронизации в значительной степени помимо точки. Я ищу быстрый и sql-поддерживаемый способ получить указатель на определенную строку. Я поставил пример как можно проще. –