Invoke-Sqlcmd: недопустимое имя объекта 'Inventar' - PullRequest
0 голосов
/ 28 марта 2019

Итак, я пытаюсь запустить SQL-запрос через Powershell с помощью Invoke-Sqlcmd-CMDLet. Довольно прямо Вперед:

Invoke-Sqlcmd -Query $Query -ServerInstance $DBServer -Database $DBName -Username $DBUser -Password $DBPass

($ Query is "Select * FROM Inventar;")

Теперь я получаю сообщение об ошибке:

Invoke-Sqlcmd: недопустимое имя объекта 'Inventar'. В строке: 1 символ: 1 + Invoke-Sqlcmd -Query $ Query -ServerInstance $ DBServer -Database $ DBName -Usernam ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException + FullyQualifiedErrorId: SqlError, Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

В любом случае, я смог запустить Команду со следующим Запросом:

SELECT * FROM INFORMATION_SCHEMA.TABLES;

И он перечислил мне все таблицы из базы данных.

Оттуда у меня есть таблица "Inventar", вид ошибки из этого вопроса:

Azure SQL: неверное имя объекта с использованием Powershell «Invoke-sqlcmd» в Adventureworks

Кроме этого у меня уже есть атрибут -Database.

Может быть, кто-то может мне помочь?

1 Ответ

0 голосов
/ 28 марта 2019

Если вы сделаете что-то вроде Select * FROM Inventar, сервер sql будет считать, что таблица находится в схеме dbo. Если это не так, вы получите ошибку, как вы получаете. Решение состоит в том, чтобы квалифицировать схему: (database).schema.table. Ваша таблица находится в схеме с именем domain\user. Поскольку обратная косая черта не допускается в имени объекта, вам необходимо экранировать его. Вы можете сделать это, заключив схему в [] или "":

[****** \ ******].[Inventar] или

"****** \ ******"."Inventar".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...