【问题标题】:How to use isnull() in a varchar query sql server如何在 varchar 查询 sql server 中使用 isnull()
【发布时间】:2018-09-19 02:32:53
【问题描述】:

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

【问题讨论】:

  • 你有什么问题?
  • 那么,您的问题是什么,您还没有问过。另一方面,连接值来创建查询是一个坏主意。它只是让你可以注射。我建议参数化您的查询。
  • 这是您制作可选参数的方式吗,如果不应该使用,请提供null
  • 问题是当我有 @rightType 等于 null 时没有任何效果
  • @JamesZ 是的,正好做一个可选参数

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


【解决方案1】:

要在动态 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 中,因此您可以在 SQL 中附加任意数量(或无)条件,而不必担心ands 的数量是否正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多