【发布时间】:2015-10-18 16:15:17
【问题描述】:
DECLARE @id int
DECLARE @name nvarchar(20)
SET @id = 5
SET @name = 'Paul'
这两个选项有什么区别:
Set @SQLQueryInnen = 'SELECT * FROM someTable WHERE ID = ' + @id + ' AND NAME = ''' + @name + ''''
Execute sp_Executesql @SQLQueryInnen
和
Set @SQLQueryInnen = 'SELECT * FROM someTable WHERE ID = @id AND NAME = @name'
Set @ParmDefinition = '@id int, @name nvarchar(20)'
Execute sp_Executesql @SQLQueryInnen, @ParmDefinition, @id
到目前为止,在使用@ParmDefinition 时,我只看到两次声明@id 和@name 的数据类型的开销。另一方面,使用@ParamDefinition 似乎更容易“构建字符串”。
【问题讨论】:
-
第二个参数化了您的查询,有助于防止 SQL 注入。
标签: sql-server tsql dynamic-sql sp-executesql