[Microsoft] [Драйвер ODBC 17 для SQL Server] [SQL Server] Неверный синтаксис рядом с abcdef.(102) (SQLExecDirectW) ") - PullRequest
1 голос
/ 19 марта 2019
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)
=============================================

Получение неправильной синтаксической ошибки рядом с паролем

Ответы [ 3 ]

1 голос
/ 19 марта 2019

Сначала создайте действительный оператор T-SQL. У вас есть ошибки при использовании CREATE LOGIN и sp_executesql .

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, @Databaseownerpass sysname', @Databaseowner, @Databaseownerpass;"
)   

Затем, если вы используете ? в качестве заполнителя, выполните ваш скрипт следующим образом:

cursor.execute(sql_login, (owner, ownerpass))
1 голос
/ 19 марта 2019

В соответствии с тем, что я нашел, если у вашего оператора 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)

Надеюсь, это поможет.

0 голосов
/ 12 апреля 2019

"SET @sql = N'Если не существует (выберите * из sys.sql_logins, где name = @Databaseowner) '+ N' CREATE LOGIN '+ QUOTENAME (@Databaseowner) + N' '' WITH PASSWORD = '+ QUOTENAME(@Databaseownerpass, '' '') + N ';'; "

как я могу добавить check_policy = off в строке выше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...