我在varchar
类型的变量中构建了一个查询我想用isnull()
进行测试
例如:
declare @sql varchar(max)
set @sql = '
Select top (100) id
FROM RIGHT R inner join RIGHT_TYPE RT on
R.RIGHT_TYPE_CODE = RT.CODE
WHERE R.RIGHT_TYPE_CODE = isnull('+@rightType+', R.RIGHT_TYPE_CODE)
'
exec (@sql)
go
@rightType
是我的存储过程的参数。
当@rightType
等于null nothings时,问题就出现了
谢谢。
答案 0 :(得分:1)
要在动态SQL中使用可选参数,这通常是最佳选择:
for
这样你就不会将输入字符串与SQL连接起来,所以没有机会发生SQL注入,优化器更喜欢这个,因为只有当实际给出时,参数才在SQL中。
DECLARE @rightType nvarchar(50)
DECLARE @sql nvarchar(max);
set @sql = '
Select top (100) id
FROM RIGHT R inner join RIGHT_TYPE RT on
R.RIGHT_TYPE_CODE = RT.CODE
WHERE 1=1'
if (@rightType is not NULL) set @sql = @sql + ' and R.RIGHT_TYPE_CODE = @rightType'
EXEC sp_executesql @sql, N'@rightType nvarchar(50)', @rightType
位于SQL中,因此您可以将任何数字(或无)标准附加到SQL,而不必担心1=1
的正确数量。