Запрос SELECT для таблицы с пробелом в имени, используя SQSH - PullRequest
7 голосов
/ 19 января 2012

Я использую SQSH (версия 2.1) в Ubuntu 10.04 для подключения к базе данных MSSQL с помощью такой команды:

sqsh -S server -U user -P password -D database

У меня есть таблица My Table, но я не могу найти способ выполнить запрос SELECT. Это то, что я пробовал до сих пор:

SELECT * FROM 'My Table'
go

Вывод: неверный синтаксис рядом с «Моей таблицей». (Я получаю то же самое для двойных кавычек)

\set t="My Table"
SELECT * FROM $t
go

Вывод: недопустимое имя объекта «Мой». (Что странно, потому что если я сделаю \ echo $ t, я получу полное имя таблицы)

SELECT * FROM My\\ Table
go

Вывод: недопустимое имя объекта «Мой».

SELECT * FROM [My Table]
go

Вывод: данные Unicode в сопоставлении только для Unicode или данные ntext не могут быть отправлены клиентам с использованием DB-Library (например, ISQL) или ODBC версии 3.7 или более ранней.

Эта последняя команда отлично работает для имен таблиц без пробелов.

ОБНОВЛЕНИЕ: другие команды работают нормально, например Я могу получить описание таблицы с:

SELECT column_name,data_type FROM information_schema.columns WHERE table_name = 'My Table'
go

Ответы [ 4 ]

12 голосов
/ 20 января 2012

Помещение имени таблицы в кавычки не работает в MS SQL Server.
Правильный способ использования [ ]:

SELECT * FROM [My Table]
3 голосов
/ 09 марта 2015

Я использую SQL 2008R2, и у меня работает следующее

['table name']
2 голосов
/ 19 января 2012

Наконец найдено решение . Мне пришлось добавить следующие 2 строки в /etc/freetds/freetds.conf

tds version = 8.0
client charset = UTF-8
0 голосов
/ 19 января 2012

Попробуйте установить для QUOTED_IDENTIFIER значение ON при использовании SQL Server.Для получения дополнительной информации о QUOTED_IDENTIFIER см .: http://msdn.microsoft.com/en-us/library/ms174393.aspx

...