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)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说他那边可以执行成功,并且结果是有效的,但也并没有找到我这边是什么原因,也有网友和我相同情况,不能得到有效值。
请大家帮忙看一下!
as
begin
declare @a varchar(100)
set @a='test'
select @a
end
go
exec lin_test1 --上面只是编译,执行才有结果,照你上面那样的话,那这个不用执行应该也会返回'test'.-----------------------
第2种情况下,存储过程中都没对@sum_1赋值,所以应该还是NULL
偶是菜鸟..呵呵
有对@sum_1赋值啊。set @sql='select @sum_1 = count(*)'+ case when @param1=1 then ' from a_table' else ' from b_table' end已经赋值了呀。。
要是这样不行,那怎么行。
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,
是可以执行,并有显示结果成功的。