SQL中基于计数结果集的单个查询


DECLARE @CreatedBy VARCHAR(100)='ABC',
@CreatedDate DATETIME=GETDATE(),
@ErrID INT
SELECT
@Count = COUNT (1)
FROM TABLE1
WHERE CatName not in('XXX') and
ED IS NULL OR LTRIM(RTRIM(ED)) = ''
IF @Count >0
BEGIN 
SELECT @ErrID=ErrorID 
FROM    ErrorMessages
WHERE   Message LIKE 'ED is a mandatory field and cannot be left blank'
INSERT INTO ErrorLog 
(

CatName
,RowID
,ErrorID
,CreatedBy
,CreatedDate) 

SELECT
CatName
,RowID
, @ErrID
, @CreatedBy
, @CreatedDate
FROM    TABLE1
WHERE CatName not in('XXX') and
ED IS NULL OR LTRIM(RTRIM(ED)) = ''
END 

如果你看到上面,Select被运行了两次如果count>0,我再次运行相同的Select .

我有几百个验证要做…是否有其他方法可以避免再次运行相同的查询。(一个检查计数,如果计数> 0,相同的选择与额外的列插入到另一个表)。

不需要计数任何东西,因为您只想知道是否存在任何行…检查一下。另外,在条件看起来可疑的地方,您可能应该使用括号:

if exists (
select * from table1
where CatName not in('XXX') 
and (ED is null or LTrim(RTrim(ED)) = '')
)
begin
...

然而,更好的模式应该是简单地执行插入并检查@@rowcount,这样就不需要重复任何查询了。

INSERT INTO ErrorLog...
SELECT...
if @@rowcount > 0 /* rows were inserted */
begin
SELECT @ErrID = ErrorID
...
end

相关内容

  • 没有找到相关文章

最新更新