0
Create Procedure ssp_InsertClientDefaults(
@cid int
)
AS
BEGIN
INSERT INTO ClientTermData
  (ClientID, TermID, NormCount, NormProb, DiscCount, DiscProb, Weight) 
WHERE NOT EXISTS
  (SELECT 
   @cid, GlobalTermData.TermID, GlobalTermData.NormCount, GlobalTermData.NormProb, 
   GlobalTermData.DiscCount, GlobalTermData.DiscProb, GlobalTermData.Weight 
   FROM GlobalTermData, DefaultTerms 
  WHERE DefaultTerms.TermID = GlobalTermData.TermID);
END
GO

'Where' 出现错误。我不知道出了什么问题。

4

4 回答 4

1

你的意思可能是这样的:

Create Procedure ssp_InsertClientDefaults
(
        @cid int
    )
AS
        BEGIN
            Insert into ClientTermData(ClientID,TermID,NormCount,NormProb,DiscCount,DiscProb,Weight) 
                Select @cid, GlobalTermData.TermID, GlobalTermData.NormCount, 
                   GlobalTermData.NormProb,GlobalTermData.DiscCount,GlobalTermData.DiscProb,
                    GlobalTermData.Weight 
                from GlobalTermData
                Where not exists( Select 1 
                                  from GlobalTermData INNER JOIN DefaultTerms 
                                  on DefaultTerms.TermID = GlobalTermData.TermID
                                  where DefaultTerms.TermID = GlobalTermData.TermID
                                -- And possibly some other exclusion filter using @cid here
                    );
        END
GO

编辑

解释- 正如其他人指出的那样,您不能以这种方式将 where 子句中的“选择”列返回到插入。此外,exists 函数几乎可以检查任何内容 - 无需将所有列都放入存在中。最后,更多的是样式问题,但最好进行内部连接,而不是使用 where 连接条件的交叉连接。

于 2012-08-16T14:40:38.137 回答
0

你不能那样使用WHERE子句。检查 MSDN 中的INSERT..INTO sintax

您应该执行以下操作:

INSERT your_table(your_columns)
SELECT your_values
  FROM other_table
 WHERE your_where_conditions
于 2012-08-16T14:35:52.790 回答
0

我不完全确定,但是VALUES ('foo','bar')您在 ? 之后是否缺少插入的一部分INSERT INTO (derp,cookies)

于 2012-08-16T14:33:35.190 回答
0

您没有值列表 - 您不能将 where 子句作为插入语句的值列表。您需要一个选择语句。您的查询应该是这样的:


Create Procedure ssp_InsertClientDefaults( 
@cid int 
) 
AS 
BEGIN 
Insert into ClientTermData(ClientID,TermID,NormCount,NormProb,DiscCount,DiscProb,Weight) 
select [something] from [table]
Where not exists( Select @cid,GlobalTermData.TermID,GlobalTermData.NormCount,GlobalTermData.NormProb,GlobalTermData.DiscCount,GlobalTermData.DiscProb,GlobalTermData.Weight from GlobalTermData,DefaultTerms where DefaultTerms.TermID = GlobalTermData.TermID); 

END 
GO 



另外,不要忘记您的选择值列表必须与您的 insert into 语句相匹配。

于 2012-08-16T14:33:38.280 回答