如何在 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
秒。
我在 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
秒。