【问题标题】:How to convert a T-SQL query into a Stored Procedure?如何将 T-SQL 查询转换为存储过程?
【发布时间】:2018-02-20 12:36:23
【问题描述】:

我正在运行SQL Server 2012,我需要将T-SQL 查询转换为Stored Procedure。我的目标是运行SQL 作业,该作业将每天执行此Stored Procedure

我的T-SQL 查询如下:

DECLARE @Body NVARCHAR(MAX),
    @TableHead VARCHAR(1000),
    @TableTail VARCHAR(1000)

SET @TableTail = '</table></body></html>' ;
SET @TableHead = '<html><head>' + '<style>'
    + 'td {border: solid black;border-width: 1px;padding-left:5px;padding-right:5px;padding-top:1px;padding-bottom:1px;font: 11px arial} '
    + '</style>' + '</head>' + '<body>' + 'Report generated on : '
    + CONVERT(VARCHAR(50), GETDATE(), 106) 
    + ' <br> <table cellpadding=0 cellspacing=0 border=0>' 
    + '<tr> <td bgcolor=#E6E6FA><b>StayYear</b></td>'
    + '<td bgcolor=#E6E6FA><b>Market</b></td>'
    + '<td bgcolor=#E6E6FA><b>Jan</b></td>'
    + '<td bgcolor=#E6E6FA><b>Feb</b></td>'
    + '<td bgcolor=#E6E6FA><b>Mar</b></td>'
    + '<td bgcolor=#E6E6FA><b>Apr</b></td>'
    + '<td bgcolor=#E6E6FA><b>May</b></td>'
    + '<td bgcolor=#E6E6FA><b>Jun</b></td>'
    + '<td bgcolor=#E6E6FA><b>Jul</b></td>'
    + '<td bgcolor=#E6E6FA><b>Aug</b></td>'
    + '<td bgcolor=#E6E6FA><b>Sep</b></td>'
    + '<td bgcolor=#E6E6FA><b>Oct</b></td>'
    + '<td bgcolor=#E6E6FA><b>Nov</b></td>'
    + '<td bgcolor=#E6E6FA><b>Dec</b></td>';

SET @Body = ( SELECT *
              FROM  View1               
                FOR   XML RAW('tr'),
                      ELEMENTS
            )


SELECT  @Body = @TableHead + ISNULL(@Body, '') + @TableTail

将上述转换为Stored Procedure的步骤是什么?

【问题讨论】:

  • 输入参数是什么?并且输出是表格的形式?
  • 您是说没有找到有关如何在 MS SQL SERVER 中创建存储过程的信息?
  • 这不是我在 SQL 中会做的事情。这是需要在表示层上完成的事情。您的 SQL 只需要检索数据。
  • 鉴于最后一步是设置变量,因此无论您如何包装,您的代码都不会做任何有用的事情。
  • @ZoharPeled 你能详细说明一下吗?

标签: sql sql-server tsql stored-procedures


【解决方案1】:

您可以将您的脚本添加为存储过程,只需将您的查询绑定到Create Procedure 语句中即可。像这样

CREATE PROCEDURE <Database Schema>.<Procedue Name>
AS
BEGIN
   <Your Script>
END

您可以在BEGINEND 之间复制和粘贴您的查询。

像这样

CREATE PROCEDURE dbo.sProc_MyProc
AS
BEGIN

DECLARE @Body NVARCHAR(MAX),
    @TableHead VARCHAR(1000),
    @TableTail VARCHAR(1000)

SET @TableTail = '</table></body></html>' ;
SET @TableHead = '<html><head>' + '<style>'
    + 'td {border: solid black;border-width: 1px;padding-left:5px;padding-right:5px;padding-top:1px;padding-bottom:1px;font: 11px arial} '
    + '</style>' + '</head>' + '<body>' + 'Report generated on : '
    + CONVERT(VARCHAR(50), GETDATE(), 106) 
    + ' <br> <table cellpadding=0 cellspacing=0 border=0>' 
    + '<tr> <td bgcolor=#E6E6FA><b>StayYear</b></td>'
    + '<td bgcolor=#E6E6FA><b>Market</b></td>'
    + '<td bgcolor=#E6E6FA><b>Jan</b></td>'
    + '<td bgcolor=#E6E6FA><b>Feb</b></td>'
    + '<td bgcolor=#E6E6FA><b>Mar</b></td>'
    + '<td bgcolor=#E6E6FA><b>Apr</b></td>'
    + '<td bgcolor=#E6E6FA><b>May</b></td>'
    + '<td bgcolor=#E6E6FA><b>Jun</b></td>'
    + '<td bgcolor=#E6E6FA><b>Jul</b></td>'
    + '<td bgcolor=#E6E6FA><b>Aug</b></td>'
    + '<td bgcolor=#E6E6FA><b>Sep</b></td>'
    + '<td bgcolor=#E6E6FA><b>Oct</b></td>'
    + '<td bgcolor=#E6E6FA><b>Nov</b></td>'
    + '<td bgcolor=#E6E6FA><b>Dec</b></td>';

SET @Body = ( SELECT *
              FROM  View1               
                FOR   XML RAW('tr'),
                      ELEMENTS
            )


SELECT  @Body = @TableHead + ISNULL(@Body, '') + @TableTail

END

【讨论】:

  • 仅供参考:程序没有架构,我说的是这部分&lt;Procecude Schema&gt;\
  • @TheGameiswar,如果想在 dbo 以外的模式中编写 SP,可以。我经常这样做。
  • 存储过程主体不需要BEGIN/END。
  • 对,但您需要在最后一条语句中输入SELECT @TableHead + ISNULL(@Body, '') + @TableTail,或者您需要在末尾添加SELECT @Body。否则,SP 不会返回任何结果集,执行后@Body 的内容会丢失。此外,您可能需要添加一些参数(例如过滤条件)。
  • @Matt 谢谢。你让我头疼了!
【解决方案2】:
  1. 只需右键单击“存储过程”,然后单击“存储过程”

    将打开一个新窗口,其中包含一些非常基本的代码。

  2. 删除绿色的东西

  3. 命名您的存储过程,在 SProc 的名称中不要有空格。

  4. 将您的 SQL 脚本粘贴到 BEGINEND 子句之间。

  5. 点击 F5 编译您的 Sproc。

  6. 如果一切设置正确,您将收到一条消息,内容为

    Command(s) completed successfully.

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多