【发布时间】:2019-03-19 07:42:14
【问题描述】:
ownerpass="abcdef"
owner="yrdy"
sql_login = (
"DECLARE @sql AS NVARCHAR(MAX);"
"DECLARE @Databaseowner sysname = ?;"
"DECLARE @Databaseownerpass sysname = ?;"
"SET @sql = N'if not exists (select * from sys.sql_logins where name = @Databaseowner )' + N' CREATE LOGIN ' + QUOTENAME(@Databaseowner) + N''' WITH PASSWORD = ' + QUOTENAME(@Databaseownerpass, '''') + N';';"
"EXEC sp_executesql @sql,N'@Databaseowner sysname', N'@Databaseownerpass sysname', @Databaseowner = @Databaseowner, @Databaseownerpass = @Databaseownerpass;")
cursor.execute(sql_login, owner,ownerpass)
=============================================
在密码附近出现不正确的语法错误
【问题讨论】:
-
N''' WITH PASSWORD应该是N' WITH PASSWORD。 -
而
"EXEC sp_executesql @sql,N'@Databaseowner sysname', N'@Databaseownerpass sysname', @Databaseowner = @Databaseowner, @Databaseownerpass = @Databaseownerpass;")应该是"EXEC sp_executesql @sql, N'@Databaseowner sysname, @Databaseownerpass sysname', @Databaseowner, @Databaseownerpass;" -
pyodbc.ProgrammingError: ('42000', u'[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]过程或函数指定的参数过多。(8144) ( SQLExecDirectW)') 得到这个错误 N'if not exists (select * from sys.sql_logins where name = @Databaseowner )' + N' CREATE LOGIN ' + QUOTENAME(@Databaseowner) + N' WITH PASSWORD = ' + QUOTENAME(@Databaseownerpass , '''') + N';';"
-
@AzarManiyar 尝试执行如下语句:
"EXEC sp_executesql @sql, N'@Databaseowner sysname, @Databaseownerpass sysname', @Databaseowner, @Databaseownerpass;" -
是的尝试了同样的错误
标签: sql-server python-3.x python-2.7 azure-sql-database pyodbc