如何在varchar查询sql server中使用isnull()

时间:2018-04-09 16:11:21

标签: sql-server stored-procedures exec concat isnull

我在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时,问题就出现了 谢谢。

1 个答案:

答案 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的正确数量。