如何在 varchar 查询 sql 服务器中使用 isnull()

How to use isnull() in a varchar query sql server

我在 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 时的问题有效 谢谢。

要在动态 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 注入,优化器更喜欢这样,因为参数在SQL 仅在实际给出时。

1=1 在 SQL 中,因此您可以将任何数字(或 none)条件附加到 SQL 而不必担心数量是否正确共 and 秒。