В соответствии с тем, что я нашел, если у вашего оператора sql есть параметры, вы должны изменить свой код следующим образом:
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))
Ссылка: (Python) cursor.execute (sql) [ 113]
Надеюсь, это поможет.
Нет. Я не думаю, что существует O (n2) алгоритм для него. Я ожидал бы, существовал ли такой алгоритм, Вы могли бы решить всю парную проблему кратчайших путей в O (n2) также, который не имеет место. Асимптотически самый быстрый алгоритм, о котором я могу думать, является реализацией алгоритма поиска кратчайшего пути Dijkstra с "кучей" Fibonacci (O (n2log n) в не очень плотные графики).
Учитывая, что это:
Можно ли придумать O (kn^2 + m) переходный алгоритм закрытия/сокращения, где k является количеством недостающих/дополнительных краев в переходном закрытии/сокращении?
Все еще считается нерешенным вопросом людьми, которые думают об этих видах вещей больше, чем мы делаем, я сказал бы, что "Не знаю".
(Но если Вы решаете его и хотите доктора философии, я знаю тот алгоритм.)
Хм. Я нашел алгоритм, который вычисляет переходное закрытие в O (n^2) ОЖИДАЕМОЕ время выполнения.