J'ai une application Delphi XE3 qui crée des utilisateurs et des connexions dans une base de données SQL Server. J'ai utilisé FireDAC TAdConnection
, TADQuery
et deux TAdScript
pour exécuter des instructions SQL pour créer les utilisateurs et les connexions. Lorsque je tente de créer connexion sur SQL Server, l'instruction SQL pour créer des connexions fonctionne très bienCréer un utilisateur dans SQL Server génère une erreur: SUBQUERY RETURNED PLUS DE 1 VALEUR
CREATE LOGIN LOGIN_NAME
WITH PASSWORD='PASSWORD', CHECK_POLICY = OFF,
DEFAULT_DATABASE = DATABASE
Mais lorsque je tente de créer l'utilisateur sur la base de données
CREATE USER USER_NAME
FOR LOGIN LOGIN_NAME WITH DEFAULT_SCHEMA=dbo
le code renvoie une erreur:
Subquery returned more than 1 value. This is not permitted when the subquery follows =,!=,<,<=,>,>= or when the subquery is used as an expression
J'ai essayé d'exécuter l'instruction SQL en utilisant TAdConnection
, TAdQuery
et TADScript
, mais tous les retourne la même erreur.
Pourriez-vous m'aider s'il vous plait?
MISE À JOUR 1: Merci pour votre aide et commentaires
Ceci est le résultat lorsque j'utilise SQL Server Management Studio pour la création de la base de données USER
CREATE USER KDESAR12 FOR LOGIN KDESAR12
WITH DEFAULT_SCHEMA=dbo
Résultat
(1 row(s) affected)
La requête utilisée pour obtenir le déclencheur de la base de données
select * from KACTUSDESARROLLO.sys.triggers where parent_class_desc = 'DATABASE'
Renvoie 0 lignes
Mon code Delphi est comme suit:
//Using TADScript
try
lStSQL := 'SET CMDSEP ;';
lStSQL := lStSQL + ' USE MY_DATABASE_NAME; ';
lStSQL := lStSQL + ' CREATE USER KDESAR12 FOR LOGIN KDESAR12 WITH DEFAULT_SCHEMA=dbo;';
ADScript1.SQLScripts.Add.SQL.Text := lStSQL;
ADScript1.ValidateAll;
ADScript1.ExecuteAll;
except on E: exception do
begin
ShowMessage(E.Message);
end;
end;
//Using TADQuery
try
lStSQL := ' CREATE USER KDESAR12 FOR LOGIN KDESAR12 WITH DEFAULT_SCHEMA=dbo;';
ADQuery2.SQL.Add (lStSQL);
ADQuery2.ExecSQL;
except on E: exception do
begin
ShowMessage(E.Message);
end;
end;
//Using TADConnection
try
lStSQL := ' CREATE USER KDESAR12 FOR LOGIN KDESAR12 WITH DEFAULT_SCHEMA=dbo;';
ADConnection1.ExecSQL (lStSQL);
except on E: exception do
begin
ShowMessage(E.Message);
end;
end;
Tous les composants retourne la même erreur
Avez-vous essayé cette instruction sur le SQL Server Studio de gestion? Vous serez en mesure d'affiner les possibilités, en déterminant si le problème réside dans les composants ADO, ou votre base de données eux-mêmes. –
"select * from sys.triggers où parent_class_desc = 'MY_DATABASE_NAME'" est incorrect. Devrait être "select * from MY_DATABASE_NAME.sys.déclenche où parent_class_desc = 'Database' " –
merci @ DavidBrowne Microsoft renvoie 0 lignes trop ' select * from KACTUSDESARROLLO.sys.triggers où parent_class_desc = « DATABASE'' –