SQL Server «Недопустимый столбец» в запросе SELECT для временной таблицы - проблема CASE SENSITIVITY - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть случай, когда у меня есть NO контроль вообще в конфигурации SQL Server.

Вот моя конфигурация:

  • SQL Server 2008
  • SQL Server INSTANCE Сортировка: Latin_General_BIN (который, я знаю, чувствителен к регистру)
  • Данная база данных (которая не учитывает регистр ... SQL_Latin1_General_CP1_CI_AS)

Вот сценарий, который я хочу ... если возможно:

Учитывая

CREATE DATABASE given_database;

USE given_database;

CREATE TABLE #test (Field1 nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS);

Когда

SELECT field1 FROM #test; /*Notice the lower case on field1*/

Тогда

Неверное имя столбца 'field1'

Есть ли способ заставить это работать?

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

1 Ответ

0 голосов
/ 19 сентября 2018

Есть ли способ заставить эту работу?

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

CREATE TABLE #test (Field1 nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS);

INSERT INTO #test 
VALUES ('test'),('TEST'),('Test')

SELECT field1 FROM #test --should fail
SELECT Field1 FROM #test WHERE Field1 = 'tEst' --should work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...