创建存储过程(在sql Server 的查询分析器中): create procedure myProce as select * from myTable------------------------ 程序调用存储过程: dsn=ConfigurationSettings.AppSettings["ConnStr"]; SqlConnection conn=new SqlConnection(dsn);SqlCommand comd=new SqlCommand("myProce",conn); //字符串是调用的存储过程名称 comd.CommandType=CommandType.StoredProcedure; //告诉comd,你要使用存储过程方式conn.Open(); SqlDataReader dr=comd.ExecuteReader(); conn.Close();
....... 下面我就不用罗嗦了吧,^^....
使用Create Procedure创建存储过程 你可以使用Create Procedure来创建一个存储过程。下面就是一个非常简单的存储过程的一个例子:CREATE PROCEDURE retrieve_authors AS SELECT * FROM Authors本例子中,存储过程的名称为retrieve_authors。你可以给存储过程赋予任何你想要的名称,但最好你能够使该名称在一定程度上描述存储过程的功能。为了指明是存储过程一部分的SQL语句,你只需简单地在关键词AS后面包含它们。你可以使用EXECUTE语句来执行一个存储过程。 比如,为了执行retrieve_authors存储过程,你可以使用如下的语句:EXECUTE retrieve_authors当执行该存储过程时,所有包括在其中的SQL语句都会执行,在上面的例子中,会返回所有在Authors表中的记录。 当在批处理中的第一个语句是调用存储过程时,你并不需要使用EXECUTE语句。你可以简单地提供存储过程的名称来执行存储过程。比如在ISQL/W中,可以象下面所示来执行存储过程: retrieve_authors 这起同样的作用。存储过程会被执行,并会返回结果。然而如果在该存储过程之前还有其他的任何语句,你就会收到错误信息(一般地,语法错误)。当你创建和执行一个存储过程时,这仅仅是在某一个数据库的范围内完成。假设你在数据库MyDatabase内创建了存储过程retrieve_authors。如果没有指明过程调用,你就不能在另一个数据库比如MyDatabase2中调用存储过程retrieve_authors。 假如你要在Mydatabase2中执行存储过程retrieve_authors,必须使用如下的语句:EXECUTE Mydatabase..retrieve_authors一旦你已经创建了一个存储过程,你就能使用系统存储过程sp_helptext来观看在该存储过程的的SQL语句。比如,如果你输入命令sp_helptext retrieve_authors,就会显示下面的结果:text …………………………………………… CREATE PROCEDURE retrieve_authors AS SELECT * FROM Authors 注意 你可能感到奇怪的是,sp_helptext系统过程本身就是一种存储过程类型。它是一种系统的存储过程。(系统存储过程存储在Master数据库中,能够被所有的数据库访问。)为了满足你的好奇心,你可以使用命令sp_helptext sp_helptext来观看组成sp_helptext本身的SQL语句。 你在创建完存储过程后,不能对其进行修改。假如你需要修改一个存储过程。你必须首先破坏它,然后重新构建之。为了破坏一个存储过程。你可以使用DROP PROCEDURE语句,例如下面的语句删除retrieve_authors存储过程: DROP PROCEDURE retrieve_authors 注意 你可以使用系统存储过程sp_help来观看在当前数据库中所有存储过程的列表。假如你不加任何修改地执行了sp_help。该过程会显示在当前数据库中所有的存储过程、触发器和表。假如在sp_help后面跟上指定的存储过程,sp_help会仅仅显示那个存储过程的信息。使用SQL Enterprise Manager 创建存储过程 假如你要创建一个复杂的存储过程,使用SQL Enterprise Manager要比ISQL/w要容易得多,该程序允许你更容易地修改存储过程,它可以自动为你删除和重新创建存储过程。 要使用SQL Enterprise Manage来创建一个存储过程。首先启动该程序,选择你要用于存储表的数据库,然后在菜单上选择Manage|Manage Stored Procedure,这时就会显示如图12。4所示的窗口。 当你第一次打开存储过程管理对话框窗口时,会自动显示文本CREATE PROCEDURE <PROCEDURE NAME>。如果学过上面部分的内容,你就会对该文本非常的熟悉。这是CREATE PROCEDURE语句。替换<PROCEDURE NAME>成你所需要的名称。 在关键词AS后面,你可以输入组成你存储过程的语句。比如,假设你在数据库中有一个名为Philosophers的数据库表,其中包含了一些哲学家的列表。下面的存储过程在如果在数据库中有Plato存在时,会打印“Plato is a philosopher”;否则它会打印“Plato is not a philosopher” --------------------------------------------------------------- CREATE PROCEDURE check_philosophers AS IF EXISTS(SELECT name FROM Philosophers WHERE name=”Plato”) PRINT “Plato is a philosopher” ELSE PRINT “Plato is not a philosopher” -------------------------------------------------------------- 当你已经完成输入存储过程后,你可以点击保存对象按钮来保存之(它看起来象一个绿色的三角形)。 为了观看在你第一次保存之后的存储过程的文本,你需要在Procedure下拉菜单中再次选择该存储过程。SQL Server会自动在你的文档中插入新的语句。比如,在保存完check_philosophesr过程之后,会显示如下的文本: if exists (select * from sysobjects where id=object_id(‘dbo.check_philisophers’) and sysstat & 0xf=4) drop procedure dbo.check_philosophers GO CREATE PROCEDURE check_philosophers AS IF EXISTS(SELECT name FROM Philosophers WHERE name=”Plato”) PRINT “Plato is a philosopher” ELSE PRINT “Plato is not a philosopher” GO 为什么SQL Server要添加这些语句呢?这些语句是什么用的呢?这些添加的语句并不包含在存储过程中。它们的使用是使存储过程的使用变得更加容易。 当在过程中的第一个语句执行时,它检查是否有存储过程check_philosophers已经存在于数据库中。假如该过程已经存在,语句会删除该过程。这样,假如你修改了你的存储过程,然后点击Save Object按钮时,该语句会确保过程在修改后再次创建之前已经被删除了。注意 在修改你的存储过程时,注意不要删除那些添加的语句。假如说你删除了第一个语句,你就不能正确地保存你的存储过程。相反的,你就会获得一个错误信息告诉你,存储过程已经存在于数据库中(假如你正处于这种情况下,你只需要用语句DROP PROCEDURE来删除前一版本)。 使用SQL Enterprise Manager而不是ISQL/w来创建你的存储过程的主要优点是使用Enterprise Manage可以在将来很容易地修改存储过程,在已经保存了存储过程之后,你可以使用管理存储过程对话框来选择和修改它。使用ISQL/w在创建了存储过程之后对其进行修改是非常困难的。给存储过程传值 当你调用一个存储过程时,你可以使用参数来传值给它,从而使你的存储过程变得非常的灵活。 比如,你想修改过程check_philosophers,使之能够检测是否存在某一个哲学家。你可以使用如下的语句进行修改: ----------------------------------------------------------------- CREATE PROCEDURE check_philosophers (@philosopher VARCHAR(30)) AS IF EXISTS(SELECT name FROM Philosophers WHERE name = @philosopher) PRINT “A philosopher” ELSE PRINT “Not a philisopher” ----------------------------------------------------------------- 当该过程执行时,它检查传递给变量@philosopher的姓名是否存在于表Philosophers中。假如@philosopher的值存在于表中,打印文本“A philosopher”,否则打印文本“Not a philisopher”当你在存储过程中包含参数时,你把它们列在CREATE PROCEDURE语句的后面的括号内,但必须在关键词AS之前。对于每一个参数,你都必须指明数据类型。在一个单独的过程中,你最多能设置255个参数。比如下面的过程检查是否在传递的姓名当中,至少有一个是哲学家的姓名: CREATE PROCEDURE check_philosophers (@firstname VARCHAR(30),@secondname VARCHAR(30)) AS IF EXISTS(SELECT name FROM Philosophers WHERE name=@firstname OR name=@secondname) PRINT “At least one of them is a philosopher” ELSE PRINT “Neither one of them is a philisopher” 为了执行一个具有一个或多个参数的存储过程,你只需简单地在存储过程名称的后面列出参数的值。 比如: EXECUTE check_philosophers “Plato” , ”Aristotle” 假如一个存储过程具有多个参数。你必须以正确的顺序来传值。有时候这并不是很方便。你可以使用另一种方法,通过名称来传递参数,如下所示: EXECUTE check_philisophers @firstname=“Plato” , @secondname=”Aristotle” 该语句完成于前一语句完全相同的事情。然而通过使用参数名,你可以使用任何你想要的顺序来传递参
Sql Server用过,但DB2就不知道了。
我的一些经验:http://blog.csdn.net/dobly/archive/2004/07/23/50033.aspx
create procedure myProce
as
select * from myTable------------------------
程序调用存储过程:
dsn=ConfigurationSettings.AppSettings["ConnStr"];
SqlConnection conn=new SqlConnection(dsn);SqlCommand comd=new SqlCommand("myProce",conn); //字符串是调用的存储过程名称
comd.CommandType=CommandType.StoredProcedure; //告诉comd,你要使用存储过程方式conn.Open();
SqlDataReader dr=comd.ExecuteReader();
conn.Close();
....... 下面我就不用罗嗦了吧,^^....
你可以使用Create Procedure来创建一个存储过程。下面就是一个非常简单的存储过程的一个例子:CREATE PROCEDURE retrieve_authors
AS
SELECT * FROM Authors本例子中,存储过程的名称为retrieve_authors。你可以给存储过程赋予任何你想要的名称,但最好你能够使该名称在一定程度上描述存储过程的功能。为了指明是存储过程一部分的SQL语句,你只需简单地在关键词AS后面包含它们。你可以使用EXECUTE语句来执行一个存储过程。
比如,为了执行retrieve_authors存储过程,你可以使用如下的语句:EXECUTE retrieve_authors当执行该存储过程时,所有包括在其中的SQL语句都会执行,在上面的例子中,会返回所有在Authors表中的记录。
当在批处理中的第一个语句是调用存储过程时,你并不需要使用EXECUTE语句。你可以简单地提供存储过程的名称来执行存储过程。比如在ISQL/W中,可以象下面所示来执行存储过程:
retrieve_authors
这起同样的作用。存储过程会被执行,并会返回结果。然而如果在该存储过程之前还有其他的任何语句,你就会收到错误信息(一般地,语法错误)。当你创建和执行一个存储过程时,这仅仅是在某一个数据库的范围内完成。假设你在数据库MyDatabase内创建了存储过程retrieve_authors。如果没有指明过程调用,你就不能在另一个数据库比如MyDatabase2中调用存储过程retrieve_authors。
假如你要在Mydatabase2中执行存储过程retrieve_authors,必须使用如下的语句:EXECUTE Mydatabase..retrieve_authors一旦你已经创建了一个存储过程,你就能使用系统存储过程sp_helptext来观看在该存储过程的的SQL语句。比如,如果你输入命令sp_helptext retrieve_authors,就会显示下面的结果:text
……………………………………………
CREATE PROCEDURE retrieve_authors AS SELECT * FROM Authors
注意
你可能感到奇怪的是,sp_helptext系统过程本身就是一种存储过程类型。它是一种系统的存储过程。(系统存储过程存储在Master数据库中,能够被所有的数据库访问。)为了满足你的好奇心,你可以使用命令sp_helptext sp_helptext来观看组成sp_helptext本身的SQL语句。
你在创建完存储过程后,不能对其进行修改。假如你需要修改一个存储过程。你必须首先破坏它,然后重新构建之。为了破坏一个存储过程。你可以使用DROP PROCEDURE语句,例如下面的语句删除retrieve_authors存储过程:
DROP PROCEDURE retrieve_authors
注意
你可以使用系统存储过程sp_help来观看在当前数据库中所有存储过程的列表。假如你不加任何修改地执行了sp_help。该过程会显示在当前数据库中所有的存储过程、触发器和表。假如在sp_help后面跟上指定的存储过程,sp_help会仅仅显示那个存储过程的信息。使用SQL Enterprise Manager 创建存储过程
假如你要创建一个复杂的存储过程,使用SQL Enterprise Manager要比ISQL/w要容易得多,该程序允许你更容易地修改存储过程,它可以自动为你删除和重新创建存储过程。
要使用SQL Enterprise Manage来创建一个存储过程。首先启动该程序,选择你要用于存储表的数据库,然后在菜单上选择Manage|Manage Stored Procedure,这时就会显示如图12。4所示的窗口。
当你第一次打开存储过程管理对话框窗口时,会自动显示文本CREATE PROCEDURE <PROCEDURE NAME>。如果学过上面部分的内容,你就会对该文本非常的熟悉。这是CREATE PROCEDURE语句。替换<PROCEDURE NAME>成你所需要的名称。
在关键词AS后面,你可以输入组成你存储过程的语句。比如,假设你在数据库中有一个名为Philosophers的数据库表,其中包含了一些哲学家的列表。下面的存储过程在如果在数据库中有Plato存在时,会打印“Plato is a philosopher”;否则它会打印“Plato is not a philosopher”
---------------------------------------------------------------
CREATE PROCEDURE check_philosophers AS
IF EXISTS(SELECT name FROM Philosophers WHERE name=”Plato”)
PRINT “Plato is a philosopher”
ELSE
PRINT “Plato is not a philosopher”
--------------------------------------------------------------
当你已经完成输入存储过程后,你可以点击保存对象按钮来保存之(它看起来象一个绿色的三角形)。
为了观看在你第一次保存之后的存储过程的文本,你需要在Procedure下拉菜单中再次选择该存储过程。SQL Server会自动在你的文档中插入新的语句。比如,在保存完check_philosophesr过程之后,会显示如下的文本:
if exists (select * from sysobjects where id=object_id(‘dbo.check_philisophers’) and sysstat & 0xf=4)
drop procedure dbo.check_philosophers
GO
CREATE PROCEDURE check_philosophers AS
IF EXISTS(SELECT name FROM Philosophers WHERE name=”Plato”)
PRINT “Plato is a philosopher”
ELSE
PRINT “Plato is not a philosopher”
GO
为什么SQL Server要添加这些语句呢?这些语句是什么用的呢?这些添加的语句并不包含在存储过程中。它们的使用是使存储过程的使用变得更加容易。
当在过程中的第一个语句执行时,它检查是否有存储过程check_philosophers已经存在于数据库中。假如该过程已经存在,语句会删除该过程。这样,假如你修改了你的存储过程,然后点击Save Object按钮时,该语句会确保过程在修改后再次创建之前已经被删除了。注意
在修改你的存储过程时,注意不要删除那些添加的语句。假如说你删除了第一个语句,你就不能正确地保存你的存储过程。相反的,你就会获得一个错误信息告诉你,存储过程已经存在于数据库中(假如你正处于这种情况下,你只需要用语句DROP PROCEDURE来删除前一版本)。
使用SQL Enterprise Manager而不是ISQL/w来创建你的存储过程的主要优点是使用Enterprise Manage可以在将来很容易地修改存储过程,在已经保存了存储过程之后,你可以使用管理存储过程对话框来选择和修改它。使用ISQL/w在创建了存储过程之后对其进行修改是非常困难的。给存储过程传值
当你调用一个存储过程时,你可以使用参数来传值给它,从而使你的存储过程变得非常的灵活。
比如,你想修改过程check_philosophers,使之能够检测是否存在某一个哲学家。你可以使用如下的语句进行修改:
-----------------------------------------------------------------
CREATE PROCEDURE check_philosophers
(@philosopher VARCHAR(30))
AS
IF EXISTS(SELECT name FROM Philosophers WHERE name = @philosopher)
PRINT “A philosopher”
ELSE
PRINT “Not a philisopher”
-----------------------------------------------------------------
当该过程执行时,它检查传递给变量@philosopher的姓名是否存在于表Philosophers中。假如@philosopher的值存在于表中,打印文本“A philosopher”,否则打印文本“Not a philisopher”当你在存储过程中包含参数时,你把它们列在CREATE PROCEDURE语句的后面的括号内,但必须在关键词AS之前。对于每一个参数,你都必须指明数据类型。在一个单独的过程中,你最多能设置255个参数。比如下面的过程检查是否在传递的姓名当中,至少有一个是哲学家的姓名:
CREATE PROCEDURE check_philosophers
(@firstname VARCHAR(30),@secondname VARCHAR(30))
AS
IF EXISTS(SELECT name FROM Philosophers
WHERE name=@firstname OR name=@secondname)
PRINT “At least one of them is a philosopher”
ELSE
PRINT “Neither one of them is a philisopher”
为了执行一个具有一个或多个参数的存储过程,你只需简单地在存储过程名称的后面列出参数的值。
比如:
EXECUTE check_philosophers “Plato” , ”Aristotle” 假如一个存储过程具有多个参数。你必须以正确的顺序来传值。有时候这并不是很方便。你可以使用另一种方法,通过名称来传递参数,如下所示:
EXECUTE check_philisophers @firstname=“Plato” , @secondname=”Aristotle”
该语句完成于前一语句完全相同的事情。然而通过使用参数名,你可以使用任何你想要的顺序来传递参
7.2版中是不能直接CREATE PROCEDURE的
有没有高手讲解一下如何做呀
我看到好像可以通过集成vc的编译器来编译存储过程
但是具体如何做实在没有找到
8.1版没有此问题,可以直接用开发中心来完成
可是7.2版呢?
我也是湖大滴
今年刚毕业滴 不过我再外面混了半年多了
public SqlDataReader RunProcDR(string procName)
{
SqlCommand cmd = CreateCommand(procName, null);
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}private SqlCommand CreateCommand(string procName, SqlParameter[] prams) {
// make sure connection is open
Open(); //command = new SqlCommand( sprocName, new SqlConnection( ConfigManager.DALConnectionString ) );
SqlCommand cmd = new SqlCommand(procName, con);
cmd.CommandType = CommandType.StoredProcedure; // add proc parameters
if (prams != null) {
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}
// return param
cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null)); return cmd;
}