0
votes

Fonction SQL - Ceci n'est pas autorisé lorsque la sous-requête suit =,! =, <, <=,>,> Ou lorsque la sous-requête est utilisée comme une expression

CREATE TABLE Property542
(
    PID INT IDENTITY(1,1) NOT NULL ,
    PropertyID AS RIGHT ('PID0000' + CAST(PID AS VARCHAR(10)), 10) PERSISTED 
          CONSTRAINT PK_Property PRIMARY KEY CLUSTERED,
    Availability BIT NOT NULL,
    P_Address VARCHAR(30) NOT NULL,
    MonthlyRent INT NOT NULL,
    Max_tenants INT NOT NULL,
    Type_of_Property VARCHAR(15) NOT NULL,
    --NIC varchar(10) FOREIGN KEY REFERENCES Landlord (NIC)
)

CREATE TABLE DetachedHouse768
(
    PropertyID VARCHAR(10) PRIMARY KEY,
    Dept VARCHAR(30) NOT NULL,
)

DECLARE @id TABLE (ID varchar(10))

INSERT INTO Property542
OUTPUT INSERTED.PropertyID INTO @id(ID)
VALUES (1, 'Kandy Road,Pasyala', 5000, 4, 'DetachedHouse'),
       (0, 'Kale para,Mathara', 7500, 2, 'Flat'),
       (1, 'No34,New Town,Kaluthara', 10000, 1, 'TerransedHouse');

INSERT INTO DetachedHouse768(PropertyID, Dept) 
VALUES ((SELECT ID FROM @id), 'room'),
       ((SELECT ID FROM @id), 'floor'),
       ((SELECT ID FROM @id), 'House');
I get this error:
  Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.
I want to insert more data in onetime using this method.  

4 commentaires

Et l'erreur vous dit le problème. Qu'en est-il de l'erreur, ne comprenez-vous pas, afin que nous puissions essayer d'élaborer (bien que cela soit assez explicite).


Je ne peux pas comprendre comment le réparer.


Eh bien, quelle valeur de id es-tu d'attente pour chaque ligne? Les résultats attendus nous aideraient à vous aider.


Il semble que vous attendiez chaque utilisation de (sélectionnez ID à partir de @ID) pour renvoyer la valeur d'une seule des lignes créées par la section précédente de la séquence. C'est pas qu'est-ce qui se passerait. Chaque utilisation reviendrait les trois rangées créées dans la section précédente, ce qui signifie que la valeur à utiliser pour ces nouveaux inserts est ambiguë (non bien définie).


3 Réponses :


1
votes
INSERT INTO DetachedHouse768(PropertyID, Dept) 
select i.ID, d.dept
from @id as i
cross join (values('room'), ('floor'), ('House')) as d(dept);

0 commentaires

1
votes

Assumer votre intention d'insérer 3 Détachedhouse768 Code> Rowo (salle, plancher, maison) pour chaque ligne précédemment insérée de la propriété542, le primaire sur Détachedhouse768 est incorrect. PropertyID CODE> Seul n'est pas unique, il s'agit donc d'une clé composite sur ProtitierID code> et dupt code> pour être unique.

ci-dessous est un insert. ..Sélectionnez Exemple avec Joindre Cross Join Code>: P>

CREATE TABLE Property542
(
    PID int IDENTITY(1,1) NOT NULL ,
    PropertyID  AS RIGHT ('PID0000' + CAST(PID AS VARCHAR(10)), 10) PERSISTED 
          CONSTRAINT PK_Property PRIMARY KEY CLUSTERED,
    Availability bit NOT null,
    P_Address varchar(30) Not null,
    MonthlyRent int Not null,
    Max_tenants  int Not null,
    Type_of_Property varchar(15) Not null
);

CREATE TABLE DetachedHouse768
(
    PropertyID varchar(10),
    Dept varchar(30) Not null,
    CONSTRAINT PK_DetachedHouse768 PRIMARY KEY CLUSTERED(PropertyID,Dept)
);

DECLARE @id TABLE (ID varchar(10))
INSERT INTO Property542
OUTPUT INSERTED.PropertyID INTO @id(ID)
VALUES  (1,'Kandy Road,Pasyala',5000,4,'DetachedHouse')
       ,(0,' Kale para,Mathara',7500,2,'Flat')
       ,(1,'No34,New Town,Kaluthara',10000,1,'TerransedHouse');
INSERT INTO DetachedHouse768( PropertyID ,Dept)
SELECT ID, Dept
FROM @id
CROSS JOIN (VALUES
     ('room')
    ,('floor')
    ,('house')
) AS Depts(Dept);


0 commentaires

0
votes

L'ID Sélectionnez à partir de @ID dans votre instruction 2ND Insérer n'est pas déterministe, ce qui signifie qu'il ne renvoie que 1 valeur.

Dans cette partie de la requête (la sous-requête), elle n'attend que 1 valeur, et votre identifiant SELECT à partir de @ID ne fait pas cela (évidemment) en raison de défenseurs de conditions que vous avez peut définir à l'aide de clause.


0 commentaires