表A:(A1,A2) 字段类型都是:varchar(50)
AA,A1
BB,A2
CC,A3
......比如我有一个存储过程,是这样的::
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Test]
AS
BEGIN
---------------------------------------------------------------------------------------------------------------------
exec('select A2 from 表A where A1='''+'AA'+'''')
---------------------------------------------------------------------------------------------------------------------
END
即在表A中查找字段A1='AA'的记录.我的问题是如何能看到存储过程实际执行的语句,就是这句:select * from 表A where A1='AA'因为在用exec()中,出现如下情况:字符串的拼接,插入一些特殊字符(如在每条结果后面都加上':',再输出结果,即输出的是'A1:')...... 时,会出现比较多的 单引号,看的眼睛比较花。
所以想看看 存储过程 实际执行的语句,因为这样的:select * from 表A where A1='AA' 看起来很清晰直观。ps:因为有时有参数传入,难免会有sql语句拼接,所以会用到exec方式,所以不要轻易的说出'不用exec不就行了'这样的话。请大家慷慨指教。

解决方案 »

  1.   

    print ('select A2 from 表A where A1='''+'AA'+'''')
      

  2.   

    print ('select A2 from 表A where A1='''+'AA'+'''')
      

  3.   


    declare @sql nvarchar(4000)
    set @sql='select A2 from 表A where A1='''+'AA'+''''
    print @sql
    --exec(@sql)
      

  4.   


    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[Test]
    AS
    BEGIN
    declare @sql varchar(8000)
    set @sql='select A2 from 表A where A1='''+'AA'+''''
    print @sql或者select @sql
    ---------------------------------------------------------------------------------------------------------------------
    exec(@sql)
    ---------------------------------------------------------------------------------------------------------------------
    END
      

  5.   


    set @sql='select A2 from 表A where A1='''+'AA'+''''
    print @sql
      

  6.   


    declare @sql nvarchar(2000)
    set @sql='select A2 from 表A where A1='''+'AA'+''''
    select @sql;--你可以在这查看
    exec('select A2 from 表A where A1='''+'AA'+'''')
      

  7.   

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[Test]
    AS
    BEGIN
    declare @str varchar(8000)
    ---------------------------------------------------------------------------------------------------------------------
    set @str='select A2 from 表A where A1='''+'AA'+''''
    select @str   --输出@str
    exec(@str)    --执行
    ---------------------------------------------------------------------------------------------------------------------
    END
      

  8.   

    定义一个变更 
    declare @sql 
    set @sql = " select * form table1 "
    print @sql 
      

  9.   

    事件探查器跟蹤得到執行的SQL
      

  10.   


    declare @sql nvarchar(2000)
    set @sql='select A2 from 表A where A1='''+'AA'+''''
    select @sql再程序里获取到参数,然后在存储里把参数替换成程序里的,再print一下就行了
      

  11.   


    declare @sql nvarchar(2000)
    set @sql='select A2 from 表A where A1='''+'AA'+''''
    select @sql已经是显示执行的语句了
      

  12.   


    declare @sql 
    set @sql = " select * form table1 " 
    select @sql