Не используйте QUOTENAME
и конкатенацию для параметра предложения WHERE
. Кроме того, избегайте использования устаревшего драйвера SQL Server
ODBC, поставляемого с Windows, для доступа к базе данных SQL Azure. Вместо этого загрузите и используйте более новый драйвер ODBC . Ниже приведен пример с этими изменениями.
conn = pyodbc.connect("DRIVER={ODBC Driver 17 for SQL Server};"
"SERVER="+server+";"
"UID="+username+";"
"PWD="+password,
autocommit=True)
cursor = conn.cursor()
database= "abcd"
sql_create = (
"DECLARE @sql AS NVARCHAR(MAX);"
"SET @sql = N'if not exists(select * from sys.databases where name = @DatabaseName)' + N' CREATE DATABASE ' + QUOTENAME(?) + N';';"
"EXEC sp_executesql @sql, N'@DatabaseName sysname', @DatabaseName = ?;")
cursor.execute(sql_create,database,database)
Вы также можете объявить переменную T-SQL для имени базы данных и присвоить ее значению параметра, чтобы вам нужно было передать только один параметр:
sql_create = (
"DECLARE @sql AS NVARCHAR(MAX);"
"DECLARE @DatabaseName sysname = ?;"
"SET @sql = N'if not exists(select * from sys.databases where name = @DatabaseName)' + N' CREATE DATABASE ' + QUOTENAME(@DatabaseName) + N';';"
"EXEC sp_executesql @sql, N'@DatabaseName sysname', @DatabaseName = @DatabaseName;")
cursor.execute(sql_create,database)