一棵树

路漫漫其修远兮 吾将上下而求索。

导航

sql最佳实践总结

1:为了遵循最佳实践,在子查询返回的结果中应该排除Null值。

2:in是三值谓词逻辑而exists是二值谓词逻辑(true,false)觉不会有Unknown.exists会自动把null过滤掉。因此使用Not exists比使用not in更安全。

-- Exclude NULLs
SELECT custid, companyname
FROM Sales.Customers AS C
WHERE custid NOT IN(SELECT O.custid
FROM Sales.Orders AS O
WHERE O.custid IS NOT NULL);

-- Using NOT EXISTS
SELECT custid, companyname
FROM Sales.Customers AS C
WHERE NOT EXISTS
(SELECT *
FROM Sales.Orders AS O
WHERE O.custid = C.custid);

-- Cleanup
DELETE FROM Sales.Orders WHERE custid IS NULL;
DBCC CHECKIDENT('Sales.Orders', RESEED, 11077);

3:在创建视图时指定SCHEMABINDING选项这样可以防止视图引用的表删除等。

ALTER VIEW Sales.USACusts WITH SCHEMABINDING
AS

SELECT
custid, companyname, contactname, contacttitle, address,
city, region, postalcode, country, phone, fax
FROM Sales.Customers
WHERE country = N'USA';
GO

posted on 2015-01-06 10:41  nxp  阅读(118)  评论(0)    收藏  举报