昨天我在一个用户组会议上,他们指出使用参数化查询比对查询进行编码更好。这让我开始思考,这样做有什么好处(显然比这要大得多):
DECLARE @Client1 UNIQUEIDENTIFIER, @Client2 UNIQUEIDENTIFIER SET @ClientId1 ='41234532-2342-3456-3456-123434543212'; SET @ClientId2 = '12323454-3432-3234-5334-265456787654'; SELECT ClientName FROM dbo.tblclient WHERE id IN (@Client1,@Client2)
相对于:
SELECT ClientName FROM dbo.tblclient WHERE id IN ('41234532-2342-3456-3456-123434543212','12323454-3432-3234-5334-265456787654')
IN如果您的IN列表不时更改,则参数化查询和子句实际上不会一起实现。
IN
根据设计,参数仅是一个值。考虑到安全性问题,必须手动执行除此以外的所有其他操作,例如SQLInjection。
从性能的角度来看,对于参数化查询,您将具有更好的性能,特别是如果重复执行同一查询但参数值不同的话。但是,如果您有一个动态IN列表(有时有2项,有时是3项),则可能无法获得使用参数化查询的优势。
但是,不要失去希望。一些人已经能够实现这一点(参数化查询和IN子句)。再次,尽管如此,它并不微不足道。