ПОПРОБУЙТЕ: Вы можете получить имя таблицы и столбца, используя 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