Как исправить ошибку 42000, неправильный синтаксис рядом с '@ P1'.при реализации хранимой процедуры в Visual Studio для SQL Server? - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь реализовать хранимую процедуру, которую я создал в SQL Server, через Visual Studio, используя файл CSV, который я создал с помощью панд.Хранимая процедура просто вводит данные из моего CSV-файла в целевую таблицу, вызванную в хранимой процедуре, однако я сталкиваюсь с ошибкой («42000», «[42000] [Microsoft] [Драйвер ODBC SQL Server] [SQL Server]».Неверный синтаксис рядом с '@ P1'. ") Каждый раз, когда я запускаю код Python, который я подробно описал ниже.

Я попробовал различные комбинации приведенного ниже кода и убедился, что моя целевая таблица структурирована как datetime для всех столбцов даты и времени, а varchar 50 - как столбец описания и области.

CA=pd.read_csv('10514697.csv') #Name of my CSV

CA["Date"]=pd.to_datetime(CA.Date,format='%d/%m/%Y') #Converting my date from object as in CSV to datetime as required
CA["TOC"]=pd.to_datetime(CA.TOC,format='%H:%M:%S')#Converting my TOC column from object to datetime and then converting it below to just time. I repeated this step for each time column in the CSV
CA["ORD"]=pd.to_datetime(CA.ORD,format='%H:%M:%S')
CA["MOB"]=pd.to_datetime(CA.MOB,format='%H:%M:%S')
CA["IA"]=pd.to_datetime(CA.IA,format='%H:%M:%S')
CA["LS"]=pd.to_datetime(CA.LS,format='%H:%M:%S')
CA["AH"]=pd.to_datetime(CA.AH,format='%H:%M:%S')
CA["MAV"]=pd.to_datetime(CA.MAV,format='%H:%M:%S')
CA["CD"]=pd.to_datetime(CA.CD,format='%H:%M:%S')
CA.Date=CA.Date.dt.date
CA["Station Area"] = CA["Station Area"].astype(str) # I convert the object to str, same done for description
CA["StationArea"]= CA["Station Area"] # I remove the space from the station area so it is a single word
CA.Description = CA.Description.astype(str)
CA.TOC = CA.TOC.dt.time
CA.ORD = CA.ORD.dt.time
CA.MOB = CA.MOB.dt.time
CA.IA = CA.IA.dt.time
CA.LS = CA.LS.dt.time
CA.AH = CA.AH.dt.time
CA.MAV = CA.MAV.dt.time
CA.CD = CA.CD.dt.time




import pypyodbc #establishing connection 
connection = pypyodbc.connect('Driver=SQL Server;Server=CPX-YKJPS50NNO9\SQLEXPRESS;Database=ABCRetail')
try:
    sqlCommand = "EXEC uspCSVInserts (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" #calling the required USP with the required amount of parameters
    values = CA[['Date','StationArea', 'Description', 'TOC', 'ORD', 'MOB', 'IA', 'LS', 'AH', 'MAV', 'CD']].values.tolist() #converting all of the values in the CSV into a list for entry into the target table
    cursor = connection.cursor()
    cursor.executemany(sqlCommand, values) #The code fails at this point and does not progress to the commit stage
    cursor.commit()
except Exception as ex:
    print("Failed to execute stored procedure due to :", ex)

finally: 
    if (connection.connected):
        connection.close()


Stored procedure code in SQL server is as follows:
@Date datetime,
@StationArea varchar(50),
@Description varchar(50),
@TOC datetime,
@ORD datetime,
@MOB datetime,
@IA datetime,
@LS datetime,
@AH datetime,
@MAV datetime, 
@CD datetime

AS 
INSERT into BigData
([Date], StationArea, [Description], TOC, ORD, MOB, IA, LS, AH, CD)
Values
(@Date, @StationArea, @Description, @TOC,@ORD, @MOB, @IA, @LS, @AH, @CD)

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

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