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) ============================================= Getting incorrect syntax error near password
3 Réponses :
D'après ce que j'ai trouvé, si votre instruction sql a des paramètres, vous devez modifier votre code comme ceci:
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))
Référence: (Python) cursor.execute (sql)
J'espère que cela vous aidera.
Commencez par générer une instruction T-SQL valide. Vous avez des erreurs lorsque vous utilisez CREATE LOGIN et sp_executesql .
cursor.execute(sql_login, (owner, ownerpass))
Ensuite, si vous utilisez ?
comme espace réservé , exécutez votre script comme ceci:
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;" )
"SET @sql = N'if n'existe pas (sélectionnez * dans sys.sql_logins où name = @Databaseowner) '+ N' CREATE LOGIN '+ QUOTENAME (@Databaseowner) + N' '' WITH PASSWORD = '+ QUOTENAME (@Databaseownerpass, '' '') + N ';'; "
comment puis-je ajouter check_policy = off dans la ligne ci-dessus?
N '' 'WITH PASSWORD
doit êtreN' WITH PASSWORD
.Et
"EXEC sp_executesql @ sql, N '@ Databaseowner sysname', N '@ Databaseownerpass sysname', @Databaseowner = @Databaseowner, @Databaseownerpass = @Databaseownerpass;")
doit être"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] La procédure ou la fonction a trop d'arguments spécifiés. (8144) (SQLExecDirectW)') obtenant cette erreur N 's'il n'existe pas (sélectionnez * dans sys.sql_logins où nom = @Databaseowner)' + N 'CREATE LOGIN' + QUOTENAME (@Databaseowner) + N 'WITH PASSWORD =' + QUOTENAME (@Databaseownerpass, '' '') + N ';'; "
@AzarManiyar Essayez d'exécuter une instruction comme celle-ci:
"EXEC sp_executesql @sql, N '@ Databaseowner sysname, @Databaseownerpass sysname', @Databaseowner, @Databaseownerpass;"
Oui essayé J'ai la même erreur
@AzarManiyar Votre instruction devrait fonctionner même avec cet appel:
EXEC sp_executesql @sql, N '@ Databaseowner sysname', @Databaseowner;
, car vous essayez de concaténer@Databaseownerpass
.