可以把 sql 文件里面的内容先读取出来,保存到一个字符串中,然后在执行。

解决方案 »

  1.   

    写成存储过程是什么意思?该怎么写呢?
    刚开始学asp.net,不知道该从哪里入手,郁闷ing~~~~~~
      

  2.   

    存储过程
    在使用 Microsoft® SQL Server™ 2000 创建应用程序时,Transact-SQL 编程语言是应用程序和 SQL Server 数据库之间的主要编程接口。使用 Transact-SQL 程序时,可用两种方法存储和执行程序。可以在本地存储程序,并创建向 SQL Server 发送命令并处理结果的应用程序;也可以将程序在 SQL Server 中存储为存储过程,并创建执行存储过程并处理结果的应用程序。 SQL Server 中的存储过程与其它编程语言中的过程类似,原因是存储过程可以: 接受输入参数并以输出参数的形式将多个值返回至调用过程或批处理。
    包含执行数据库操作(包括调用其它过程)的编程语句。 
    向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)。 
    可使用 Transact-SQL EXECUTE 语句运行存储过程。存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接用在表达式中。使用 SQL Server 中的存储过程而不使用存储在客户计算机本地的 Transact-SQL 程序的优势有: 允许模块化程序设计。 
    只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。允许更快执行。 
    如果某操作需要大量 Transact-SQL 代码或需重复执行,存储过程将比 Transact-SQL 批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。每次运行 Transact-SQL 语句时,都要从客户端重复发送,并且在 SQL Server 每次执行这些语句时,都要对其进行编译和优化。减少网络流量。 
    一个需要数百行 Transact-SQL 代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。可作为安全机制使用。 
    即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限。SQL Server 存储过程是用 Transact-SQL 语句 CREATE PROCEDURE 创建的,并可用 ALTER PROCEDURE 语句进行修改。存储过程定义包含两个主要组成部分:过程名称及其参数的说明,以及过程的主体(其中包含执行过程操作的 Transact-SQL 语句)。
      

  3.   

    创建存储过程
    可使用 Transact-SQL 语句 CREATE PROCEDURE 创建存储过程。创建存储过程前,请考虑下列事项: 不能将 CREATE PROCEDURE 语句与其它 SQL 语句组合到单个批处理中。
    创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。
    存储过程是数据库对象,其名称必须遵守标识符规则。
    只能在当前数据库中创建存储过程。 
    创建存储过程时,应指定: 所有输入参数和向调用过程或批处理返回的输出参数。
    执行数据库操作(包括调用其它过程)的编程语句。
    返回至调用过程或批处理以表明成功或失败(以及失败原因)的状态值。 
    系统存储过程
    Microsoft® SQL Server™ 2000 中的许多管理活动是通过一种称为系统存储过程的特殊过程执行的。系统存储过程在 master 数据库中创建并存储,带有 sp_ 前缀。可从任何数据库中执行系统存储过程,而无需使用 master 数据库名称来完全限定该存储过程的名称。强烈建议您不要创建以 sp_ 为前缀的存储过程。SQL Server 始终按照下列顺序查找以 sp_ 开头的存储过程: 在 master 数据库中查找存储过程。
    根据所提供的任何限定符(数据库名称或所有者)查找该存储过程。
    如果未指定所有者,则使用 dbo 作为所有者查找该存储过程。 
    因此,虽然当前数据库中可能存在带 sp_ 前缀的用户创建的存储过程,但总会先检查 master 数据库(即使该存储过程已用数据库名称限定)。重要  如果用户创建的存储过程与系统存储过程同名,则永远不执行用户创建的存储过程。
    分组
    如果将一个不同的标识号赋予某过程,则可以用与现有某存储过程相同的名称创建该过程,这样可允许将这些过程进行逻辑分组。同名的分组过程可以同时删除。在同一应用程序中使用的过程一般都以该方式分组。例如,用于 my_app 应用程序的过程可能被命名为 my_proc;1、my_proc;2 等。删除 my_proc 即删除该整个组。将过程分组后,就无法删除该组内的单个过程。临时存储过程
    专用和全局临时存储过程与临时表类似,都可以用向该过程名称添加 # 和 ## 前缀的方法进行创建。# 表示本地临时存储过程,## 表示全局临时存储过程。SQL Server 关闭后,这些过程将不再存在。临时存储过程在连接到 SQL Server 的早期版本时很有用,这些早期版本不支持再次使用 Transact-SQL 语句或批处理执行计划。连接到 SQL Server 2000 的应用程序应使用 sp_executesql 系统存储过程,而不使用临时存储过程。有关更多信息,请参见执行计划的高速缓存和重新使用。 只有创建本地临时过程的连接才能执行该过程,当该连接关闭(用户从 SQL Server 中注销)时,将自动删除该过程。任何连接都可执行全局临时存储过程。只有创建该过程的用户所用的连接关闭,并且所有其它连接所用的该过程的当前执行版本运行完毕后,全局临时存储过程才不再存在。一旦用于创建该过程的连接关闭,将不再允许启动执行该全局临时存储过程。只允许那些已启动执行该存储过程的连接完成该过程的运行。如果直接在 tempdb 数据库中创建没有 # 或 ## 前缀的存储过程,则由于每次启动 SQL Server 时 tempdb 都要重新创建,因此当关闭 SQL Server 时将自动删除该存储过程。直接在 tempdb 中创建的过程即使在创建该过程的连接终止后也会存在。与任何其它对象一样,可向其他用户授予、拒绝和废除执行该临时存储过程的权限。
      

  4.   

    CREATE PROCEDURE
    创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。也可以创建在 Microsoft® SQL Server™ 启动时自动运行的存储过程。语法
    CREATE PROC [ EDURE ] procedure_name [ ; number ]
        [ { @parameter data_type }
            [ VARYING ] [ = default ] [ OUTPUT ]
        ] [ ,...n ] [ WITH
        { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] 
    参数
    procedure_name新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。有关更多信息,请参见使用标识符。要创建局部临时过程,可以在 procedure_name 前面加一个编号符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。;number是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。@parameter过程中的参数。在 CREATE PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。有关更多信息,请参见 EXECUTE。 data_type参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。有关 SQL Server 提供的数据类型及其语法的更多信息,请参见数据类型。 说明  对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。
    VARYING指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。default参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。OUTPUT表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。n表示最多可以指定 2.100 个参数的占位符。{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}RECOMPILE 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。说明  在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。
    FOR REPLICATION指定不能在订阅服务器上执行为复制创建的存储过程。.使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用。AS指定过程要执行的操作。sql_statement过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。n是表示此过程可以包含多条 Transact-SQL 语句的占位符。注释
    存储过程的最大大小为 128 MB。用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在 tempdb 中创建)。在单个批处理中,CREATE PROCEDURE 语句不能与其它 Transact-SQL 语句组合使用。 默认情况下,参数可为空。如果传递 NULL 参数值并且该参数在 CREATE 或 ALTER TABLE 语句中使用,而该语句中引用的列又不允许使用 NULL,则 SQL Server 会产生一条错误信息。为了防止向不允许使用 NULL 的列传递 NULL 参数值,应向过程中添加编程逻辑或为该列使用默认值(使用 CREATE 或 ALTER TABLE 的 DEFAULT 关键字)。建议在存储过程的任何 CREATE TABLE 或 ALTER TABLE 语句中都为每列显式指定 NULL 或 NOT NULL,例如在创建临时表时。ANSI_DFLT_ON 和 ANSI_DFLT_OFF 选项控制 SQL Server 为列指派 NULL 或 NOT NULL 特性的方式(如果在 CREATE TABLE 或 ALTER TABLE 语句中没有指定的话)。如果某个连接执行的存储过程对这些选项的设置与创建该过程的连接的设置不同,则为第二个连接创建的表列可能会有不同的为空性,并且表现出不同的行为方式。如果为每个列显式声明了 NULL 或 NOT NULL,那么将对所有执行该存储过程的连接使用相同的为空性创建临时表。在创建或更改存储过程时,SQL Server 将保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置在执行存储过程时都将被忽略。在存储过程中出现的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 语句不影响存储过程的功能。其它 SET 选项(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)在创建或更改存储过程时不保存。如果存储过程的逻辑取决于特定的设置,应在过程开头添加一条 SET 语句,以确保设置正确。从存储过程中执行 SET 语句时,该设置只在存储过程完成之前有效。之后,设置将恢复为调用存储过程时的值。这使个别的客户端可以设置所需的选项,而不会影响存储过程的逻辑。说明  SQL Server 是将空字符串解释为单个空格还是解释为真正的空字符串,由兼容级别设置控制。如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。有关更多信息,请参见 sp_dbcmptlevel。 
    获得有关存储过程的信息
    若要显示用来创建过程的文本,请在过程所在的数据库中执行 sp_helptext,并使用过程名作为参数。 说明  使用 ENCRYPTION 选项创建的存储过程不能使用 sp_helptext 查看。
    若要显示有关过程引用的对象的报表,请使用 sp_depends。 若要为过程重命名,请使用 sp_rename。 引用对象
    SQL Server 允许创建的存储过程引用尚不存在的对象。在创建时,只进行语法检查。执行时,如果高速缓存中尚无有效的计划,则编译存储过程以生成执行计划。只有在编译过程中才解析存储过程中引用的所有对象。因此,如果语法正确的存储过程引用了不存在的对象,则仍可以成功创建,但在运行时将失败,因为所引用的对象不存在。有关更多信息,请参见延迟名称解析和编译。 
      

  5.   

    我想问的是怎样在asp.net里执行已经在sql server里写好的存储过程,用到哪些方法
      

  6.   

    按照楼上说的 你可以把select语句阿什么的保存在一个字符串s中,然后建立数据连接conn 在建立command,其中两个参数 分别是你的s和连接conn 在command.connection.open() 然后定义个datareader =command.execcutereader 这样你就可以将数据区出来了 当然你还可以用command.executenonquery进行插入更新等 你可以找本ADO.net的书看看 很简单的