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