Near create syntax error in

Near create syntax error in

Я получаю довольно странную синтаксическую ошибку в моем schema.sqlфайле.

Ошибка заключается в следующем:

              File “/Users/user/Documents/GitProjects/FlaskApp/flaskr/db.py”, line 88, in               init_db_command               init_db() File                                                                                                                  “/Users/user/Documents/GitProjects/FlaskApp/flaskr/db.py”, line 80, in init_db               db.executescript(f.read().decode(“utf-8”)) sqlite3.OperationalError: near                             “create”: syntax error

Я использую flask и sqlite3. И мои шаги по устранению неполадок заключались в следующем:

1) Удалите все, кроме первой строки (это работает)

2) Удалены все, кроме первых двух строк (это не так)

3) Удалите ./instance/project.sqliteфайл

4) Используйте онлайн-валидатор Это было особенно интересно, потому что было обнаружено, что каждая отдельная команда работает. Но как только я ввожу две параллельные строки, он говорит, что команды недействительны.

5) Дважды проверил документацию sqlite по удалению таблиц

6) Даже зашел так далеко, что для моего .vimrcбыло установлено значение utf-8

Я уверен, что я пропустил что-то маленькое здесь, но, похоже, ничего не работает. Любая помощь будет оценена!

Ответ

Вероятно, вы хотитеcreate timestamp, чтобы столбец был чем-то вродеcreate_timestamp, чтобы избежать столкновения с ключевыми словами sql.

Incorrect syntax near Create’ when creating stored procedure in Visual Studio Community 2017

Привет

Я использую Visual Studio community для создания проекта базы данных как части решения. Я пытаюсь создать проект с файлом с именем BulkImport_genericProcedure.sql, где у меня (только) есть следующий код:

CREATE PROCEDURE [dbo].[BulkImport_genericProcedure]

              @table varchar(250),

              @file int

AS

              declare @command nvarchar(MAX)

              set @command = concat(

                            ‘begin transaction bulkimport

                                          delete from ‘,@table,’;

                                          BULK INSERT ‘,@table,’

                                          FROM ”’,@file,”’

                                          WITH

                                          (

                                           CHECK_CONSTRAINTS

                                           ,DATAFILETYPE = ”widechar”

                                           ,FIRSTROW = 1

                                           ,KEEPIDENTITY

                                           ,MAXERRORS = 1

                                           ,TABLOCK);

                            commit transaction bulkimport’)

              exec(@command);

RETURN 0

Это дает мне 2 ошибки:

Error 1: SQL72007: The syntax check failed ‘Incorrect syntax near CREATE.’ in the batch near: ‘CREATE PROCEDURE [dbo].[BulkImport_genericProcedure]’

Error 2: SQL72007: The syntax check failed ‘Incorrect syntax near PROCEDURE.’ in the batch near: ‘CREATE PROCEDURE [dbo].[BulkImport_genericProcedure]’

Я не могу понять, почему, у меня есть другие процедуры в проекте, которые не выдают ошибку. Код отлично работает при использовании SQL Server Management Studio, похоже, это проблема, связанная с Visual Studio.

Любая помощь будет принята с благодарностью.

Ответ

Возможно, вам придется спросить на форуме SSDT о том, что может происходить. Но, по-видимому, VS видит еще немного текста перед СОЗДАНИЕМ, и отсюда все идет под откос.

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

И если вы делаете это в хранимой процедуре, у вас должно быть имя в кавычках (@table), чтобы пакет работал также, если имя таблицы содержит неидентифицирующие символы, такие как пробел. Но обратите внимание, что если вы вводите только имя в кавычках, вы не сможете обрабатывать имена, состоящие из двух частей.

В том же случае имя файла (которое, я думаю, не должно быть int) может быть указано следующим образом:

имя кавычки (@file, “”)

таким образом, обрабатываются любые одинарные кавычки в имени файла. Загвоздка здесь в том, что quotenmae обрабатывает ввод только до 127 символов, поэтому более длинные пути приведут к NULL .

И нет, ничего из этого не является академическим. Важно убедиться, что у вас нет дыр для SQL-инъекций.

Наталья Петрова
Оцените автора
Новости города Салавата
Добавить комментарий

Adblock
detector