none
请问这个存储过程是什么意思? RRS feed

  • 问题

  • USE [JFHZP]
    GO
    /****** Object:  StoredProcedure [dbo].[JF_exec_sql]    Script Date: 07/12/2012 17:44:46 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER  procedure [dbo].[JF_exec_sql]
     @sql nvarchar(1000)
    as
     exec(@sql)

    其中@sql为:

    select *from Table1 where name="lhard"

    我新学习存储过程,请您详细一些好吗?先谢谢您们了.

    2012年7月12日 10:07

答案

  • 如果要建立Stored Procedure,可以把ALTER改为CREATE即可。

    ALTER  procedure [dbo].[JF_exec_sql]

    http://msdn.microsoft.com/zh-cn/library/ms187926(v=sql.105).aspx

    另外,执行Stored Procedure的方式必须用EXECUTE(可以简写为EXEC),以你的例子看,可以用下列的T-SQL来执行JF_exec_sql这个Stored Procedure。

    CREATE  procedure [dbo].[JF_exec_sql]
     @sql nvarchar(1000)
    as
     exec(@sql)
    GO
    
    EXEC dbo.JF_exec_sql 'select * from region'
    
    EXECUTE dbo.JF_exec_sql 'select * from region'

    http://msdn.microsoft.com/zh-cn/library/ms188332.aspx

    另外,建议在用这种方式执行T-SQL时,要特别注意SQL注入攻击的问题。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月13日 6:56

全部回复

  • 看起来是用来执行动态查询的一个Stored Procedure,主要是从@sql接收T-SQL之后利用EXEC来执行,此外,你也可以通过sp_executesql来达到类似的功能,而sp_executesql又比EXEC提供更多的功能来让开发人员执行动态查询,详情可以看下列的文章。
    不知道这样是否有回答到你的问题?

    http://msdn.microsoft.com/en-us/library/ms188001.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月12日 23:02
  • 看起来是用来执行动态查询的一个Stored Procedure,主要是从@sql接收T-SQL之后利用EXEC来执行,此外,你也可以通过sp_executesql来达到类似的功能,而sp_executesql又比EXEC提供更多的功能来让开发人员执行动态查询,详情可以看下列的文章。
    不知道这样是否有回答到你的问题?

    http://msdn.microsoft.com/en-us/library/ms188001.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    谢谢您!受益菲浅.

    我还有一点不太明白:

    GO
    ALTER  procedure [dbo].[JF_exec_sql]

    这个语句应该是修改存储过程吧,但如果是修改存储过程那又为什么会执行这个@sql 即select查询语句呢?

    如果是直接创建一个存储过程呢?我对存储过程理解还比较的浅,麻烦您了!

    2012年7月13日 6:35
  • 如果要建立Stored Procedure,可以把ALTER改为CREATE即可。

    ALTER  procedure [dbo].[JF_exec_sql]

    http://msdn.microsoft.com/zh-cn/library/ms187926(v=sql.105).aspx

    另外,执行Stored Procedure的方式必须用EXECUTE(可以简写为EXEC),以你的例子看,可以用下列的T-SQL来执行JF_exec_sql这个Stored Procedure。

    CREATE  procedure [dbo].[JF_exec_sql]
     @sql nvarchar(1000)
    as
     exec(@sql)
    GO
    
    EXEC dbo.JF_exec_sql 'select * from region'
    
    EXECUTE dbo.JF_exec_sql 'select * from region'

    http://msdn.microsoft.com/zh-cn/library/ms188332.aspx

    另外,建议在用这种方式执行T-SQL时,要特别注意SQL注入攻击的问题。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年7月13日 6:56