Столбец конфликтует с типом других столбцов в списке "нет" - программирование
Подтвердить что ты не робот

Столбец конфликтует с типом других столбцов в списке "нет"

Im поворачивает sys.[views] в пары ключевых значений для сравнения со значениями на другом сервере для тестирования согласованности. Im работает в проблему, которая возвращает ошибку.

Msg 8167, уровень 16, состояние 1, строка 51

Тип столбца "тип" конфликтует с типом других столбцов, указанных в списке UNPIVOT.

Query:

SELECT
sourceUnpivoted.idServer,
sourceUnpivoted.sourceServerName,
sourceUnpivoted.name,
sourceUnpivoted.columnName,
sourceUnpivoted.columnValue
FROM (
SELECT 
CAST('1' AS VARCHAR(255)) AS idServer,
CAST('thisOne' AS VARCHAR(255)) AS sourceServerName,
CAST('theDatabase' AS VARCHAR(255)) AS sourceDatabaseName,
CAST(name AS VARCHAR(255)) AS name,
CAST(object_id AS VARCHAR(255)) AS object_id,
CAST(principal_id AS VARCHAR(255)) AS principal_id,
CAST(schema_id AS VARCHAR(255)) AS schema_id,
CAST(parent_object_id AS VARCHAR(255)) AS parent_object_id,
CAST(type AS VARCHAR(255)) AS type,
CAST(type_desc AS VARCHAR(255)) AS type_desc,
CAST(create_date AS VARCHAR(255)) AS create_date,
CAST(lock_escalation_desc AS VARCHAR(255)) AS lock_escalation_desc
...
FROM noc_test.dbo.stage_sysTables
) AS databaseTables
UNPIVOT (
columnValue FOR columnName IN (
object_id,
principal_id,
schema_id,
parent_object_id,
type,
type_desc,
create_date,
lock_escalation_desc
) 
) AS sourceUnpivoted

Почему это не похоже на [type], [type_desc], [lock_escalation_desc]??? Я также пробовал CONVERT(VARCHAR(255),type) AS type

4b9b3361

Ответ 1

На самом деле проблема сортировки. Я могу решить это, изменив эти строки:

CAST([type] collate database_default AS VARCHAR(255)) AS [type], 
CAST(type_desc collate database_default AS VARCHAR(255)) AS type_desc, 
CAST(create_date AS VARCHAR(255)) AS create_date, 
CAST(lock_escalation_desc collate database_default AS VARCHAR(255)) AS lock_escalation_desc 

Конкретная проблема заключается в том, что name сопоставляется как Latin1_General_CI_AS, тогда как остальные 3 столбца, которые вы упомянули, сопоставляются как Latin1_General_CI_AS_KS_WS (по крайней мере, на моей машине я не уверен, что бы это было на сервер/база данных с различной сортировкой по умолчанию).

Ответ 2

Это одно из решений для ошибки этого типа

1: создайте эту таблицу

CREATE TABLE People
(
PersonId int, 
Firstname varchar(50), 
Lastname varchar(25)
)

2: Затем вставьте

INSERT INTO People VALUES (1, 'Jim', 'Smith');
INSERT INTO People VALUES (2, 'Jane', 'Jones');
INSERT INTO People VALUES (3, 'Bob', 'Unicorn');

3: запустите этот script, вы получите сообщение об ошибке

Msg 8167, уровень 16, состояние 1, строка 3 Тип столбца "Фамилия" конфликтует с типом других столбцов, указанных в списке UNPIVOT.

SELECT PersonId, ColumnName, Value
FROM People
unpivot(Value FOR ColumnName IN (FirstName, LastName)) unpiv;

4: решение заключается в том, что вы должны использовать подзапрос, чтобы сначала сдать столбец Lastname равной той же длине, что и Firstname

SELECT PersonId, ColumnName, Value
FROM (
SELECT personid, firstname, cast(lastname AS VARCHAR(50)) lastname
FROM People
) d
unpivot(Value FOR ColumnName IN (FirstName, LastName)) unpiv;

Ответ 3

Предложение PIVOT/UNPIVOT чувствительно к статусу заполнения ANSI столбца (щелкните правой кнопкой мыши → свойства в SSMS), а также тип, размер и сопоставление. Попробуйте указать SET ANSI_PADDING ON | OFF в сеансе перед добавлением или воссозданием рассматриваемого столбца, чтобы он соответствовал другим в предложении PIVOT/UNPIVOT.

Ответ 4

Ran в эту же ошибку, и я просто сделал все столбцы в таблице одного и того же типа данных - у меня было сочетание int, varchar, nvarchar различной длины. После преобразования всех столбцов в моей таблице в один и тот же тип - nvarchar(255) он работал отлично.