2016-07-28 5 views
0

Iamはこのクエリを試していますが、次のエラーが表示されます。プライマリキー制約PK_ITEMPATHが違反しているというエラーも表示されます。クエリが文句を言わない成功しサブクエリが=、!=、<, <= , >、> =、またはサブクエリが式として使用されている場合は、これは許可されません。 1つ以上の値が返されました。

USE Sk_EN_UserDB 
GO 

SET NOEXEC OFF 
GO 
IF(DB_NAME() NOT LIKE '%_UserDB') 
BEGIN 
    RAISERROR ('You must run this script in UserDB database',18,0) 
    SET NOEXEC ON 
END 

GO 

IF(NOT EXISTS(SELECT * FROM UserRights.Path WHERE PathID = 'Myviews')) 
BEGIN 
    insert into UserRights.Path(PathID, IsVendorSpecific) 
    values('Myviews', 0) 
END 


IF(NOT EXISTS(SELECT * FROM UserRights.Products WHERE ProjectName = 'Products')) 
BEGIN 
    insert into UserRights.Products(ProductID, ProjectName) 
    values(
     (select MAX(ProductID) + 1 from [UserRights].Products), 
     'Products' 
    ) 
END 

insert into UserRights.ProductsToPath(ProductID, PathID) 
values(
    (select ProductID 
    from [UserRights].Products 
    where ProjectName = 'Products'), 
    'Myviews' 
) 

insert into UserRights.ModulesToProducts(ModuleID, ProductID) 
values(
    (select ModuleID 
    from [UserRights].[Modules] 
    where DisplayName = 'Products Product' or HierarchyName like '%Products Product%'), 
    (select ProductID 
    from [UserRights].Products 
    where ProjectName = 'Products') 
) 
+1

'どうすればいいですか?' 'values'で使用しているサブクエリがそれぞれ1つの値を返すことを確認してください。 – GSerg

+0

SELECTクエリの1つでは、複数のレコードが返されます。 LIMIT/TOP 1の使用を検討してください。 –

+0

1質問につき1つの質問。また、MySQLまたはMS SQL Serverを使用していますか?関与していない製品にはタグを付けないでください。 – jarlh

答えて

0

最初に実行することができるよう、このエラーを修正するためにinorderを私は何をすべき、あなたの内側の選択は、おそらくINSERT文ごとに1つの以上の値を返すされています。あなたはバッチ挿入(ステートメントごとに1つのレコードをより多く)、use a cursorを行う必要がある場合

insert into UserRights.ProductsToPath(ProductID, PathID) 
(select TOP 1 ProductID 
    from [UserRights].Products 
    where ProjectName = 'Products'), 
    'Myviews' 

:に

insert into UserRights.ProductsToPath(ProductID, PathID) 
values(
    (select ProductID 
    from [UserRights].Products 
    where ProjectName = 'Products'), 
    'Myviews' 
) 

から、あなたのINSERT文を変更してみてください。

ITEMPATH PK違反に関しては、あなたの質問ではあなたのテーブルスキーマについての十分な情報が得られませんが、エラーはすでに存在する主キーを持つレコードを挿入している可能性が高いことを意味します。あなたのインナーセレクトも同様です。

+0

@drminnarを使用すると、errosはそれ以上に来ることはありませんが、私はそれに変更すると '誤った構文の近くに '、'。 –

関連する問題

 関連する問題