Как найти имя таблицы и имя столбца из сообщения об ошибке SQL Server - PullRequest
0 голосов
/ 03 мая 2018

Мы конвертируем triggers в наши application tables с foreign keys для оптимизации производительности. triggers имеют пользовательские сообщения об ошибках в случае referential integrity violation. После изменения триггеров на внешние ключи мы используем обработку ошибок для захвата сообщений об ошибках. например, сообщение об ошибке, выданное после foreign key violation

Оператор INSERT конфликтовал с ограничением FOREIGN KEY "Fk_test". Конфликт произошел в базе данных "db", таблице "dbo.test", столбец «Код».

нам нужно динамически извлечь table name и column name из этого сообщения об ошибке, чтобы поместить их в custom error message. Есть ли способ получить table name и column name из сообщения об ошибке. Мы можем использовать некоторые строковые операции, такие как charindex, но я ищу другие варианты

1 Ответ

0 голосов
/ 03 мая 2018

ПОПРОБУЙТЕ: Вы можете получить имя таблицы и столбца, используя CHARINDEX в качестве условия sys таблиц, как показано ниже:

Это динамическое решение, хотя CHARINDEX используется и здесь ничего не прописано, поэтому я надеюсь, что оно будет полезным для вас.

DECLARE @document VARCHAR(5000)
SET @document = '
        The INSERT statement conflicted with the FOREIGN KEY constraint "fk_test". 
        The conflict occurred in database "db", table "dbo.test", column ''Code''.'

SELECT t.name AS table_name, 
    c.name AS column_name
FROM sys.tables t
INNER JOIN sys.columns c ON c.object_id = t.object_id
WHERE CHARINDEX(t.[name], @document) > 0  
    AND CHARINDEX(c.[name], @document) > 0

Сделайте поиск более надежным, добавив dbo в качестве префикса, как показано ниже:

CHARINDEX(CONCAT('dbo.',t.[name]), @document) > 0 --For SQLSERVER2012 or +
CHARINDEX('dbo.'+ t.[name], @document) > 0 --For All Version
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...