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.
3 Réponses :
INSERT INTO DetachedHouse768(PropertyID, Dept)
select i.ID, d.dept
from @id as i
cross join (values('room'), ('floor'), ('House')) as d(dept);
Assumer votre intention d'insérer 3 ci-dessous est un insert. ..Sélectionnez Exemple avec 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. 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);
L'ID Dans cette partie de la requête (la sous-requête), elle n'attend que 1 valeur, et votre identifiant Sélectionnez à partir de @ID code> dans votre instruction 2ND Insérer code> n'est pas déterministe, ce qui signifie qu'il ne renvoie que 1 valeur. P>
SELECT à partir de @ID code> ne fait pas cela (évidemment) en raison de défenseurs de conditions que vous avez peut définir à l'aide de où code> clause. P>
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 code> 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) code> pour renvoyer la valeur d'une seule des lignes créées par la section précédente de la séquence. C'est pas b> qu'est-ce qui se passerait. Chaque utilisation reviendrait les trois rangées i> créées dans la section précédente, ce qui signifie que la valeur à utiliser pour ces nouveaux inserts est ambiguë b> (non bien définie).