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-инъекций.