2015-04-28 5 views
0

Прежде чем вы выговорете мне о том, как здесь было задано: ', я хотел бы указать, что я действительно google. В некоторых случаях я даже пошел на страницу 3. вздрагиваетSMSS 'Недопустимое имя столбца'

Так вот дело: Я пытаюсь провести аудит базы данных у нас есть, установка триггеров для UPDATE, INSERT, DELETE заявления для нескольких таблиц. Триггеры создаются и связаны успешно. Каждый триггер выполняет хранимую процедуру, которая вставляет необходимые данные в нашу таблицу tick_audit.

Информация:

  • USER_ACCOUNT; для хранения кто: ничего не изменил
  • client_id; для хранения данных клиента изменились данные
  • date_time; дата редактирования
  • table_name; имя таблицы, которая была изменена
  • table_record_id; the id записей, которые были изменены
  • descr; описание почему что-то было изменено
  • remote_ip_address; поэтому мы можем следить, где что-то изменилось (внутренние или внешние)

В таблице также имеет primary_key, AUTO_INCREMENT идентификатор поля.

Когда я пытаюсь создать хранимую-процедуру

create procedure update_tick_user 
@UserId   varchar(32), 
@ClientId  varchar(32), 
@Table   varchar(64), 
@TableRecord varchar(512), 
@Descr   varchar(128), 
@RemoteIP  varchar(16) 
as 
begin 
    insert into tick_audit ('user_account', 'client_id', 'date_time', 'table_name', 'table_record_id', 'descr', 'remote_ip_address') 
    values 
    (@UserId, @ClientId, getdate(), @Table, @TableRecord, @Descr, @RemoteIP) 
end; 

Я получаю следующее сообщение об ошибке (ы):

Msg 207, уровень 16, состояние 1, процедура update_tick_user, линия 10 Недопустимое имя столбца 'user_account'.

Это повторяется для каждого столбца. Когда я бегу

exec sp_columns tick_audit 

Я получаю все столбцы из tick_audit, и даже копировать их имена в колонку полей для вставки, я получаю вышеупомянутые ошибки. Я даже получаю ошибки, когда я просто запустить

insert into tick_audit 
('user_account', 'client_id', 'date_time', 'table_name', 'table_record_id', 'descr', 'remote_ip_address') 
values 
('', '', getdate(), '', '', '', '') 

Всякий раз, когда я попробовать вставки, обновления или удаления на другую таблицу, я не получаю никаких ошибок. Есть ли что-нибудь, что я мог бы попытаться выяснить, есть ли ошибка в моем столе или какой-то сверхсекретный метод hocus-pocus, ритуал-эск?

Вот что я пытался до сих пор:

  • Отбросьте стол (На моих ногах, много много раз), воссоздать его.
  • Google в течение трех часов
  • Задаваемые мои сотрудники
  • надевают мыслительной колпачок
  • Проверьте колонки на самом деле существует (через Exec, выберите)

Пересечение моих пальцев и надеясь, что кто-то может Помоги мне.

ответ

2

' Удалить, чтобы insert ниже

insert into tick_audit (user_account, client_id, date_time, table_name, table_record_id, descr, remote_ip_address) 
values (@UserId, @ClientId, getdate(), @Table, @TableRecord, @Descr, @RemoteIP) 
+0

Я так сильно дергался. Я пропустил, что SQL-редакторы не нуждаются в одиночных кавычках. Использование слишком большого количества SQL в Notepad ++, Eclipse и т. Д. Маленькие вещи .. – Zubaja

0

Не используйте одинарные кавычки.

create procedure update_tick_user 
@UserId   varchar(32), 
@ClientId  varchar(32), 
@Table   varchar(64), 
@TableRecord varchar(512), 
@Descr   varchar(128), 
@RemoteIP  varchar(16) 
as 
begin 
    insert into tick_audit (user_account, client_id, date_time, table_name, table_record_id, descr, remote_ip_address) 
    values 
    (@UserId, @ClientId, getdate(), @Table, @TableRecord, @Descr, @RemoteIP) 
end; 
+0

@AndriyM Я изменил свой ответ. – Jens

0

Используйте скобки вместо кавычек:

insert into tick_audit ([user_account], [client_id], [date_time], [table_name], [table_record_id], [descr], [remote_ip_address]) 
values (@UserId, @ClientId, getdate(), @Table, @TableRecord, @Descr, @RemoteIP) 

Одинарная кавычка являются литералов. Для разграничения имен объектов вы должны использовать скобки или двойные кавычки, но вы можете использовать двойные кавычки только тогда, когда QUOTED_IDENTIFIER установлено на ON.

Смежные вопросы