MS SQL+存储过程
是这样的: 
(1)MS SQL查询分析器的存储过程部分不是有两个地方可以进行code修改吗,
一个是在对象资源管理器中的相应存储过程上面点右键选择“修改”可以进入code修改; 
另一个是点右键选择“执行存储过程”。 
通常我都是在“修改”中不写exec语句,而是在“执行存储过程”; 
请问exec要是放在“修改”中写,在哪里可以看到执行后的查询结果啊?还是我这边的语句是有问题的?我的语句是这个:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER PROCEDURE [dbo].[StoryProc]
@sum_1 int output AS 
declare @sql varchar(8000),
@param1 int
set @param1 = 1
set @sql=N'@sum_1 = select count(*)'+ case when @param1=1 then ' from a_table' else ' from b_table' end
EXEC sp_executeSQL @sql,N'@sum_1 INT OUTPUT',@sum_1 OUTPUT
select @sqlgo执行完了,消息中提示“命令已成功完成”,但就是不知道去哪里看查询结果了?
请大家看一下。(2)之所以想和在一起统一写,主要是因为之前是分别在“修改”与“执行存储过程”写的,但是查询结果显示为NULL。
之前的是这样的:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER PROCEDURE [dbo].[StoryProc]
@sum_1 int output,
@param1 int
 AS 
declare @sql varchar(8000)set @sql='select @sum_1  = count(*)'+ case when @param1=1 then ' from a_table' else ' from b_table' end
select @sql
select @sum_1 as N'sum_1'
go//这个是执行的语句
USE [aaa]
GODECLARE    @return_value int,
@param1 int,
        @sum_1 int EXEC    [dbo].[StoryProc] @sum_1 OUTPUT,
@param1  = 0
SELECT    'sum_1' = @sum_1 
SELECT    'Return Value' = @return_value
SELECT    @sum_1 as N'sum_1'
GO
结果如下:(无列名) 
select @sum_1  = count(*) from current_info_table sum_1 
NULL sum_1 
NULL return_value 
NULL sum_1 
NULL 
其实结果本应该是有效数字的。我的环境是MS SQL 2005。
在另一个帖子,网友jamin_liu说他那边可以执行成功,并且结果是有效的,但也并没有找到我这边是什么原因,也有网友和我相同情况,不能得到有效值。
请大家帮忙看一下!

解决方案 »

  1.   

    我一般是把EXEC放在PORC的注释里选中执行的。。
      

  2.   

    create proc lin_test1
    as
    begin
    declare @a varchar(100)
    set @a='test'
    select @a
    end
    go
    exec lin_test1   --上面只是编译,执行才有结果,照你上面那样的话,那这个不用执行应该也会返回'test'.-----------------------
    第2种情况下,存储过程中都没对@sum_1赋值,所以应该还是NULL
    偶是菜鸟..呵呵
      

  3.   


    有对@sum_1赋值啊。set @sql='select @sum_1  = count(*)'+ case when @param1=1 then ' from a_table' else ' from b_table' end已经赋值了呀。。
    要是这样不行,那怎么行。
      

  4.   

    现在是这样的
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    ALTER proc [dbo].[lin_proc]
    as
    begin
    declare @sq1 varchar(100)
    exec sp_executesql  N'select @sq1=count(*) from (case 
    when 1=1 then a_table else b_table end)',N'@sq1 int output',@sq1 output
    select @sq1 as'sq1'
    end
    //用这个执行
    USE [aaaaaaa]
    GODECLARE @return_value intEXEC @return_value = [dbo].[lin_proc]SELECT 'Return Value' = @return_valueGO
    这样就会提示:
    消息 156,级别 15,状态 1,第 1 行
    关键字 'case' 附近有语法错误。(1 行受影响)(1 行受影响)
    因为如果没有case when这个句子,直接select,
    是可以执行,并有显示结果成功的。