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'中收到错误。我无法弄清楚什么是错的。
答案 0 :(得分: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子句中的'select'列返回到插入方式。此外,exists函数可以检查几乎任何东西 - 不需要将所有列都放在exists中。最后,更多的是样式问题,但最好是使用where连接条件进行内连接而不是交叉连接。
答案 1 :(得分:0)
我不完全确定,但您是否错过VALUES ('foo','bar')
后的INSERT INTO (derp,cookies)
部分内容?
答案 2 :(得分:0)
您没有值列表 - 您不能将where子句作为insert语句的值列表。你需要一个select语句。您的查询应该是这样的:
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 statement匹配。
答案 3 :(得分:0)
您不能以这种方式使用WHERE
子句。检查MSDN的INSERT..INTO sintax
您应该执行以下操作:
INSERT your_table(your_columns)
SELECT your_values
FROM other_table
WHERE your_where_conditions