mam*_*esh 10 sql sql-server sql-server-2005
我昨天参加了一个用户组会议,他们指出使用参数化查询比编码查询更好.这让我思考,这有什么好处(显然在比这更大的规模):
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)
Run Code Online (Sandbox Code Playgroud)
相反:
SELECT ClientName
FROM dbo.tblclient
WHERE id IN ('41234532-2342-3456-3456-123434543212','12323454-3432-3234-5334-265456787654')
Run Code Online (Sandbox Code Playgroud)
如果您的列表不时发生变化,参数化查询和IN子句实际上不会简单地一起实现。IN
阅读此问题和解答:参数化 SQL IN 子句
根据设计,参数只是一个值。考虑到安全问题(例如SQL 注入),除此之外的所有内容都必须手动实现。
从性能角度来看,参数化查询将获得更好的性能,特别是如果重复运行相同的查询但使用不同的参数值。但是,如果您有一个动态IN列表(有时 2 个项目,有时 3 个),您可能无法获得使用参数化查询的优势。
不过,不要失去希望。有些人已经能够实现这一点(参数化查询和IN子句)。不过,这也不是小事。