使用 QUOTENAME 创建数据库(如果已经存在)
Create database if already exists using QUOTENAME
conn = pyodbc.connect("DRIVER={SQL Server};"
"SERVER="+server+";"
"UID="+username+";"
"PWD="+password,
autocommit=True)
cursor = conn.cursor()
database= "abcd"
sql_create = (
"DECLARE @sql AS NVARCHAR(MAX);"
"SET @sql = 'if not exists(select * from sys.databases where name = ' + QUOTENAME(?) + ')' + ' CREATE DATABASE ' + QUOTENAME(?);"
"EXEC sp_executesql @sql")
cursor.execute(sql_create,database,database)
获取类似 pyodbc.ProgrammingError 的错误消息:('42S22', u[42S22] [Microsoft][SQL 服务器的 ODBC 驱动程序 17][SQL 服务器] 无效列名称 'abcd'.(207) (SQLExecDirectW)")"
不要对 WHERE
子句参数使用 QUOTENAME
和串联。此外,避免使用 Windows 附带的旧版 SQL Server
ODBC 驱动程序来访问 Azure SQL 数据库。相反,下载并使用 newer ODBC driver。下面是这些更改的示例。
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)
conn = pyodbc.connect("DRIVER={SQL Server};"
"SERVER="+server+";"
"UID="+username+";"
"PWD="+password,
autocommit=True)
cursor = conn.cursor()
database= "abcd"
sql_create = (
"DECLARE @sql AS NVARCHAR(MAX);"
"SET @sql = 'if not exists(select * from sys.databases where name = ' + QUOTENAME(?) + ')' + ' CREATE DATABASE ' + QUOTENAME(?);"
"EXEC sp_executesql @sql")
cursor.execute(sql_create,database,database)
获取类似 pyodbc.ProgrammingError 的错误消息:('42S22', u[42S22] [Microsoft][SQL 服务器的 ODBC 驱动程序 17][SQL 服务器] 无效列名称 'abcd'.(207) (SQLExecDirectW)")"
不要对 WHERE
子句参数使用 QUOTENAME
和串联。此外,避免使用 Windows 附带的旧版 SQL Server
ODBC 驱动程序来访问 Azure SQL 数据库。相反,下载并使用 newer ODBC driver。下面是这些更改的示例。
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)