#sql-server #powershell
#sql-сервер #powershell
Вопрос:
У меня проблема с моим сценарием powershell. Мне нужна вставка в базу данных mssql.
Я получаю:
Исключение, вызывающее «ExecuteNonQuery» с аргументами «0»: «Неправильный синтаксис около ’00′». В C:powershellImportPism.ps1:259 символ: 9 $ SqlCmd.ExecuteNonQuery() ~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo : не указано: (:) [], исключение MethodInvocationException FullyQualifiedErrorId : SQLException
Вот мой код:
$sql = "
INSERT INTO [dbo].[akcja]
([ak_akt_id]
,[ak_sp_id]
,[ak_kolejnosc]
,[ak_interwal]
,[ak_zakonczono]
,[ak_sc_id]
,[ak_pr_id])
VALUES
(
$($item.akt_id)
,$($item.sp_id)
,0
,0
,$($item.data_dodania)
,NULL
,NULL)
select SCOPE_IDENTITY() as [InsertedId]
"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; User Id=$login; Password=$password; Integrated Security = false";
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $sql
$SqlCmd.Connection = $sqlConnection
$SqlConnection.Open()
$InsertedId = $SqlCmd.ExecuteScalar()
$SqlConnection.Close()
Почему это не работает?
Комментарии:
1. Очевидно, потому что в вашем SQL есть синтаксическая ошибка после замены строки. Невозможно точно сказать, что, не видя результата. Используйте параметры вместо текстовой замены значений в инструкции. Замена строк выглядит удобной, пока вы не столкнетесь с подобными проблемами (или, что еще хуже, SQL-инъекцией).
2. Правильное выполнение SQL в PowerShell
3. Спасибо @Jeroen Mostert. Я использую параметры и все в порядке 😉
Ответ №1:
Я получил эту ошибку, когда не заключил параметры даты и времени в одинарные кавычки.
Например. убедитесь, что вы добавили кавычки в строку.формат
Строка.Формат («ВСТАВИТЬ В [dbo].tbl ЗНАЧЕНИЯ ({0})
ВСТАВИТЬ В [dbo].tbl ЗНАЧЕНИЯ (0001-01-01 00:00:00.000)
необходимо быть:
Строка.Формат («ВСТАВИТЬ В [dbo].tbl ЗНАЧЕНИЯ (‘{0}’)
ВСТАВИТЬ В [dbo].ЗНАЧЕНИЯ tbl (‘0001-01-01 00:00:00.000’)