USE [IncubatorIMS_TEST]
GO
/****** 对象:  StoredProcedure [dbo].[DynamicSearchResult]    脚本日期: 03/21/2011 21:56:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[DynamicSearchResult]
@GuideTeacherType nvarchar(300),
@GuideTeacherName nvarchar(500),
@GuideTeacherCompany nvarchar(1000),
@GuideTeacherJob nvarchar(1000)
as
declare @sql nvarchar(2000)
set @sql = 'select * from BIGuideTeacher where 1=1'
if(@GuideTeacherType <> ' ')
set @sql = @sql + ' and GuideTeacherType like ' + '%' + @GuideTeacherType + '%'
if(@GuideTeacherName <> ' ')
set @sql = @sql + ' and GuideTeacherName like ' + '%' + @GuideTeacherName + '%'
if(@GuideTeacherCompany <> ' ')
set @sql = @sql + ' and GuideTeacherCompany like ' + '%' + @GuideTeacherCompany + '%'
if(@GuideTeacherJob <> ' ')
set @sql = @sql + ' and GuideTeacherJob like ' + '%' + @GuideTeacherJob + '%'
exec(@sql)
貌似没啥效果,顺便问下怎么样在SQL2005中调试存储过程啊,就是怎么样可以单步执行和打断点这种,网上说能打断点但是没找到DEBUG的按钮求帮忙~3Q~

解决方案 »

  1.   

    一般的调试方法是PRINT出来看看
      

  2.   

    怎么print给个例子看下,存储过程刚学不熟悉求指导,主要就是为了看该存储过程生成的语句是什么~谢谢~
      

  3.   

    USE [IncubatorIMS_TEST]
    GO
    /****** 对象: StoredProcedure [dbo].[DynamicSearchResult] 脚本日期: 03/21/2011 21:56:01 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    create proc [dbo].[DynamicSearchResult]
    @GuideTeacherType nvarchar(300),
    @GuideTeacherName nvarchar(500),
    @GuideTeacherCompany nvarchar(1000),
    @GuideTeacherJob nvarchar(1000)
    as
    declare @sql nvarchar(2000)
    set @sql = 'select * from BIGuideTeacher where 1=1'
    if(@GuideTeacherType <> ' ')
    set @sql = @sql + ' and GuideTeacherType like ' + '%' + @GuideTeacherType + '%'
    if(@GuideTeacherName <> ' ')
    set @sql = @sql + ' and GuideTeacherName like ' + '%' + @GuideTeacherName + '%'
    if(@GuideTeacherCompany <> ' ')
    set @sql = @sql + ' and GuideTeacherCompany like ' + '%' + @GuideTeacherCompany + '%'
    if(@GuideTeacherJob <> ' ')
    set @sql = @sql + ' and GuideTeacherJob like ' + '%' + @GuideTeacherJob + '%'
    print(@sql)--这里
      

  4.   


    --这个不用拼字符串,写那么复杂
    create proc [dbo].[DynamicSearchResult]
    @GuideTeacherType nvarchar(300)='',
    @GuideTeacherName nvarchar(500)='',
    @GuideTeacherCompany nvarchar(1000)='',
    @GuideTeacherJob nvarchar(1000)=''
    as
    begin
         select * from BIGuideTeacher 
         where (@GuideTeacherType='' or GuideTeacherType like '%'+@GuideTeacherType+'%')
         and (@GuideTeacherName='' or GuideTeacherName like '%'+@GuideTeacherName+'%')
         and (@GuideTeacherCompany='' or GuideTeacherCompany like '%'+@GuideTeacherCompany+'%')
         and (@GuideTeacherJob='' or GuideTeacherJob like '%'+@GuideTeacherJob+'%')
    end
      

  5.   

    谢谢大牛指点~想问下除了这种方式是不是也可以用when case的方式不用拼接字符串那么麻烦~还有问下SQL2005怎么打断点进行单步调试啊~还是只能在VS中进行存储过程的单步调试?求指导~
      

  6.   

    MSSQL没办法像VS那样通过设置断点来调试,尤其是使用动态SQL语句更麻烦,一般就是根据你要显示的效果,或者拼接的语句,用PRINT分别打印出来看看有没有语法错误,目前还没其他更好的方法。