我先来一个,总结了好久,觉得这么写效果不错。希望大家给点建议
ALTER PROCEDURE [dbo].[ap_intranetDHCPGetByIPAddressNameMacSel]
(
@IPAddress nvarchar (255) ,
@Name nvarchar (255) ,
@Mac nvarchar (255)
)
AS
SELECT dhcpID,
[IPAddress],
[Name],
[Description],
[Mac],
[Switch],
[Port],
[AdminSvc],
[InternalSvc],
[ExternalSvc]
FROM intranetdhcpWHERE (([IPAddress] like '%'+@IPAddress+'%') or (@IPAddress=''))
and ([Name]like '%'+@Name+'%' or @Name='')
and ([Mac] like '%'+@Mac+'%' or @Mac='') order by [IPAddress]
ALTER PROCEDURE [dbo].[ap_intranetDHCPGetByIPAddressNameMacSel]
(
@IPAddress nvarchar (255) ,
@Name nvarchar (255) ,
@Mac nvarchar (255)
)
AS
SELECT dhcpID,
[IPAddress],
[Name],
[Description],
[Mac],
[Switch],
[Port],
[AdminSvc],
[InternalSvc],
[ExternalSvc]
FROM intranetdhcpWHERE (([IPAddress] like '%'+@IPAddress+'%') or (@IPAddress=''))
and ([Name]like '%'+@Name+'%' or @Name='')
and ([Mac] like '%'+@Mac+'%' or @Mac='') order by [IPAddress]
解决方案 »
- 不需要命令InstallUtil 安装windows服务
- (高手请帮助呀)请问网页全部都是静态页,包括搜索等等这是怎么做到的呢
- FreeTextBox模态窗口中无法获取焦点?怎么办呢,有使用过的没有啊?
- 嵌套的循环体内如何处理异常错误?
- 有关StreamReader的Position问题
- winForm中怎么得到选择的是datagrid的第几行啊?
- 面试官的问题: Collection和Collections这两个概念在C#里面有什么不同?
- 请教【c#能直接访问设备的驱动程序么,还是必须通过API来调用呢】
- 请问在一个class前加 [Serializable] 是什么意思?
- C#/.net 下载服务器FTP 中的exe文件 出现“缓存”问题!该怎么解决呀?
- 请问:微软的树控件的webctrl_client文件夹,是否必须放在虚拟目录的根目录下(默认:C:/interpub/wwwroot下)呢?有人说:
- 有一段文字,是从网页上复制下来的,包括了两段重复的文字,粘贴到textbox里面去,要把它单独提取一段出来
set @sql = 'select * from tablename where 1=1'
if condition1
set @sql=@sql+ 'and column1=?'
if condition2
set @sql=@sql+ 'and column2=?'
.....
Exec(@sql)
to henreash(虫子) 你这个方法如果数据库管理员将exec 屏蔽了估计就没戏了。我们单位的数据库就不让执行存储过程中的 exec方法!
(
@tablename varchar,
@dateStart datetime,
@dateEnd datetime
)
AS
declare @sqlcmd varchar(1000)
set @sqlcmd = 'select top 5 from
(select count * from ' + @tablename + 'where convert(varchar(10),[登录时间],121)>=''' +convert(varchar(10),@dateStart,121)+ ''' and convert(varchar(10),[退出时间],121)<=''' + convert(varchar(10),@dateEnd,121) + '''group by 号码)' exec(@sqlcmd)
FROM 附近有错误……为什么呀 刚写来试的
RETURN
也就是 (@IPAddress='') or ([IPAddress] like '%'+@IPAddress+'%')
这样,如果参数为空,就不需要去看读出来的数据了,会快一些当然也不排除Query Analyzer已经非常智能地将只需要看内存的表达式先算好的可能性
而且因为是 OR 相连,在左边的条件成立的时候,右边就不用看了
所以提到“优化”,当然是把@IPAddress=''加上并且放在前面好
(
@IPAddress nvarchar (255) ,
@Name nvarchar (255) ,
@Mac nvarchar (255)
)
AS
SELECT
dhcpID,
[IPAddress],
[Name],
[Description],
[Mac],
[Switch],
[Port],
[AdminSvc],
[InternalSvc],
[ExternalSvc]
FROM
intranetdhcp
WHERE
(
([IPAddress] like '%'+ @IPAddress + '%') or
(@IPAddress='')
) and
([Name]like '%'+@Name+'%' or @Name='') and
([Mac] like '%'+@Mac+'%' or @Mac='')
order by
[IPAddress]
==========
空参数为什么不用null呢?
@IPAddress is null
WHERE
IsNull(@IPAddress, IPAddress) = IPAddress And
IsNull(@Name, Name) = Name and
IsNull(@Mac, Mac) = Mac我也看出来了,你这样写是想在查询的时候不用拼SQL。
用我的方法吧,我早就这样用了。
==========
空参数为什么不用null呢?
@IPAddress is null_____________________________
如果用isnull, 可能前面还要加一句 if @IPAddress = '' set @IPAddress = null
但''与null的意义是不同的:
null表示没有输入,''表示输入了值为''
所以用null更容易理解,并且除字符型字段外其它为空的字段必须转换null应该在调用时用DBNull.Value传给参数,而不是在sp中加:
if @IPAddress = '' set @IPAddress = null另外Isnull()还是有漏洞的,也无法达到模糊查询。
但IPAddress,Name, Mac之类感觉上并不需要用到模糊查询