home *** CD-ROM | disk | FTP | other *** search
/ 95.86.62.111 / 95.86.62.111.tar / 95.86.62.111 / sql2000 / INSTALL / web.sql < prev    next >
Text File  |  2000-07-04  |  16KB  |  561 lines

  1. -- ********************************************************************
  2. -- WEB.SQL 
  3. --
  4. -- Creates mswebtasks table and the following stored procedures
  5. --   sp_makewebtask
  6. --   sp_dropwebtask
  7. --   sp_runwebtask
  8. --     sp_cleanwebtask (SQLAgent support)
  9. --     sp_enumcodepages
  10. --     sp_readwebtask (Web Assistant UI support)
  11. --     sp_convertwebtasks (6.5 to 7.0 web task upgrade)
  12. --
  13. -- Copyright Microsoft, Inc. 1996 - 2000.                              
  14. -- All Rights Reserved.                                               
  15. --                                                                    
  16. -- ********************************************************************
  17.  
  18.  
  19. USE msdb
  20. go
  21.  
  22. EXEC sp_MS_upd_sysobj_category 1
  23. go
  24.  
  25. --====================================================================================
  26.  
  27. EXEC sp_configure 'allow updates', 1
  28. RECONFIGURE WITH OVERRIDE
  29. go
  30.  
  31. -- Add mswebtasks table if not there
  32. IF NOT EXISTS (SELECT * FROM sysobjects WHERE name = N'mswebtasks')
  33. BEGIN
  34.     CREATE TABLE mswebtasks 
  35.     (
  36.     procname    nvarchar(128)    NOT NULL,    -- Name of the procedure
  37.     outputfile    nvarchar(255)    NOT NULL,    -- Physical name of output file
  38.     taskstat    bit                NOT NULL,    -- TRUE if task scheduled, FALSE if not
  39.     wparams        image            NULL,        -- xp_runwebtask parameters
  40.     trigflags    smallint        NULL,        -- trigger status flags
  41.     taskid        int                NULL        -- task id returned by sp_addtask
  42.     )
  43. END
  44. go
  45.  
  46. IF NOT EXISTS (SELECT * FROM sysindexes WHERE name = N'web_idxproc'
  47.        AND id = object_id(N'mswebtasks'))
  48. BEGIN
  49.     CREATE UNIQUE INDEX web_idxproc ON mswebtasks(procname)
  50. END
  51. go
  52.  
  53. -- Add sp_insmswebtask if not there
  54. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_insmswebtask') AND type = 'P')
  55.    DROP PROCEDURE dbo.sp_insmswebtask
  56. go
  57.  
  58. CREATE PROCEDURE sp_insmswebtask
  59. -- This procedure is for internal use by Web Assistant
  60.     @procname        nvarchar(128),
  61.     @outputfile        nvarchar(255),
  62.     @taskstat        bit,
  63.     @wparams        image,
  64.     @trigflags        smallint,
  65.     @taskid            int
  66. AS
  67.     INSERT INTO  dbo.mswebtasks(procname, outputfile, taskstat, wparams, trigflags, taskid)
  68.         VALUES(@procname, @outputfile, @taskstat, @wparams, @trigflags, @taskid)
  69. go
  70.  
  71. -- Add sp_updmswebtask if not there
  72. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_updmswebtask') AND type = 'P')
  73.    DROP PROCEDURE dbo.sp_updmswebtask
  74. go
  75.  
  76. CREATE PROCEDURE sp_updmswebtask
  77. -- This procedure is for internal use by Web Assistant
  78.     @procname        nvarchar(128),
  79.     @wparams        image
  80. AS
  81.     UPDATE dbo.mswebtasks
  82.     SET wparams = @wparams
  83.     WHERE procname = @procname
  84.  
  85. go
  86.  
  87. -- Grant privileges on mswebtasks
  88. GRANT SELECT ON mswebtasks TO PUBLIC
  89. go
  90. GRANT INSERT ON mswebtasks TO PUBLIC
  91. go
  92. GRANT DELETE ON mswebtasks TO PUBLIC
  93. go
  94. GRANT UPDATE ON mswebtasks TO PUBLIC
  95. go
  96. GRANT EXECUTE ON sp_insmswebtask TO PUBLIC
  97. go
  98. GRANT EXECUTE ON sp_updmswebtask TO PUBLIC
  99. go
  100.  
  101. EXEC sp_MS_upd_sysobj_category 2
  102. go
  103.  
  104. --====================================================================================
  105. -- Update the master database
  106. USE master
  107. go
  108.  
  109. -- Drop the associated XPs
  110. IF EXISTS (SELECT * FROM sysobjects
  111.             WHERE type = 'X'
  112.             AND name = N'xp_makewebtask')
  113.     EXEC sp_dropextendedproc N'xp_makewebtask'
  114. go
  115. IF EXISTS (SELECT * FROM sysobjects
  116.             WHERE type = 'X'
  117.             AND name = N'xp_dropwebtask')
  118.     EXEC sp_dropextendedproc N'xp_dropwebtask'
  119. go
  120. IF EXISTS (SELECT * FROM sysobjects
  121.             WHERE type = 'X'
  122.             AND name = N'xp_runwebtask')
  123.     EXEC sp_dropextendedproc N'xp_runwebtask'
  124. go
  125. IF EXISTS (SELECT * FROM sysobjects
  126.             WHERE type = 'X'
  127.             AND name = N'xp_cleanupwebtask')
  128.     EXEC sp_dropextendedproc N'xp_cleanupwebtask'
  129. go
  130. IF EXISTS (SELECT * FROM sysobjects
  131.             WHERE type = 'X'
  132.             AND name = N'xp_enumcodepages')
  133.     EXEC sp_dropextendedproc N'xp_enumcodepages'
  134. go
  135. IF EXISTS (SELECT * FROM sysobjects
  136.             WHERE type = 'X'
  137.             AND name = N'xp_convertwebtask')
  138.     EXEC sp_dropextendedproc N'xp_convertwebtask'
  139. go
  140. -- xp for reading web tasks for the Web Wizard.
  141. IF EXISTS(SELECT * FROM sysobjects
  142.         WHERE type = 'X'
  143.             AND name = N'xp_readwebtask')
  144.     EXEC sp_dropextendedproc N'xp_readwebtask'
  145. go
  146.  
  147. -- Drop the stored procedures if they exist
  148. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_makewebtask') AND type = 'P')
  149.    DROP PROCEDURE dbo.sp_makewebtask
  150. go
  151. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_dropwebtask') AND type = 'P')
  152.    DROP PROCEDURE dbo.sp_dropwebtask
  153. go
  154. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_runwebtask') AND type = 'P')
  155.    DROP PROCEDURE dbo.sp_runwebtask
  156. go
  157. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_cleanupwebtask') AND type = 'P')
  158.    DROP PROCEDURE dbo.sp_cleanupwebtask
  159. go
  160. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_enumcodepages') AND type = 'P')
  161.    DROP PROCEDURE dbo.sp_enumcodepages
  162. go
  163. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_convertwebtasks') AND type = 'P')
  164.    DROP PROCEDURE dbo.sp_convertwebtasks
  165. go
  166.  
  167. IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'dbo.sp_readwebtask') AND type = 'P')
  168.    DROP PROCEDURE dbo.sp_readwebtask
  169. go
  170.  
  171. EXEC sp_MS_upd_sysobj_category 1
  172. go
  173.  
  174. -- Add extended stored procedures for Web Server support.
  175. sp_addextendedproc N'xp_makewebtask', 'xpweb70.dll'
  176. go
  177. sp_addextendedproc N'xp_dropwebtask', 'xpweb70.dll'
  178. go
  179. sp_addextendedproc N'xp_runwebtask', 'xpweb70.dll'
  180. go
  181. sp_addextendedproc N'xp_cleanupwebtask', 'xpweb70.dll'
  182. go
  183. sp_addextendedproc N'xp_enumcodepages', 'xpweb70.dll'
  184. go
  185. sp_addextendedproc N'xp_convertwebtask', 'xpweb70.dll'
  186. go
  187. sp_addextendedproc N'xp_readwebtask', 'xpweb70.dll'
  188. go
  189.  
  190.  
  191. --====================================================================================
  192. -- Add extended stored procedures for Web Server support.
  193. --
  194. -- sp_makewebtask: Creates and defines the Web Page Task
  195.  
  196. CREATE PROCEDURE sp_makewebtask
  197. @outputfile        nvarchar(255),
  198. @query            ntext,
  199. @fixedfont        tinyint = 1,                -- 0/1 
  200. @bold            tinyint = 0,                -- 0/1 
  201. @italic            tinyint = 0,                -- 0/1 
  202. @colheaders        tinyint = 1,                -- 0/1 
  203. @lastupdated    tinyint = 1,                -- 0/1 
  204. @HTMLheader        tinyint = 1,                -- 1-6 
  205. @username        nvarchar(128) = NULL,
  206. @dbname            nvarchar(128) = NULL,
  207. @templatefile    nvarchar(255) = NULL,
  208. @webpagetitle    nvarchar(255) = NULL,
  209. @resultstitle    nvarchar(255) = NULL,
  210. @URL            nvarchar(255) = NULL,
  211. @reftext        nvarchar(255) = NULL,
  212. @table_urls        tinyint = 0,                -- 0/1; 1=use table of URLs 
  213. @url_query        nvarchar(255) = NULL,   
  214. @whentype        tinyint = 1,                -- 1=now, 2=later, 3=every xday 
  215.                                             -- 4=every n units of time 
  216. @targetdate        int = 0,                    -- yyyymmdd as int
  217. @targettime        int = 0,                    -- hhnnss as int
  218. @dayflags        tinyint = 1,                -- powers of 2 for days of week 
  219. @numunits        tinyint = 1,
  220. @unittype        tinyint = 1,                -- 1=hours, 2=days, 3=weeks, 4=minutes
  221. @procname        nvarchar(128) = NULL,        -- name to use when making the
  222.                                             -- task and the wrapper/condenser
  223.                                             -- stored procs
  224. @maketask        int = 2,                    -- 0=create unencrypted sproc, no task
  225.                                             -- 1=encrypted sproc and task
  226.                                             -- 2=unencrypted sproc and task
  227. @rowcnt            int = 0,                    -- max no of rows to display
  228. @tabborder        tinyint = 1,                -- borders around the results table
  229. @singlerow        tinyint = 0,                -- Single row per page
  230. @blobfmt        ntext = NULL,                -- Formatting for text and image fields
  231. @nrowsperpage    int = 0,                    -- Results displayed in multiple pages of n rows per page
  232. @datachg        ntext = NULL,                -- Table and column names for a trigger
  233. @charset        nvarchar(25) = N'utf-8',    -- Universal character set is the default
  234. @codepage        int = 65001                    -- utf-8 (universal) code page is the default
  235.  
  236. AS
  237. BEGIN
  238.  
  239.    DECLARE @suid smallint
  240.    DECLARE @yearchar nvarchar(4)
  241.    DECLARE @monthchar nvarchar(2)
  242.    DECLARE @daychar nvarchar(2)
  243.    DECLARE @hourchar nvarchar(2)
  244.    DECLARE @minchar nvarchar(2)
  245.    DECLARE @secchar nvarchar(2)
  246.    DECLARE @currdate datetime
  247.    DECLARE  @retval int
  248.  
  249.  
  250. -- Check for valid @dbname if supplied
  251.    IF (@dbname is NOT NULL)
  252.       IF (NOT(exists(SELECT * FROM master..sysdatabases WHERE name = @dbname)))
  253.       BEGIN
  254.          RAISERROR(16854,11,1)
  255.          RETURN (9)
  256.       END
  257.  
  258. -- Make sure that it's the SA executing this.
  259.    IF ( NOT ( is_srvrolemember('sysadmin') = 1 ) )
  260.    BEGIN
  261.       RAISERROR( 15003, -1, -1, 'sysadmin' )
  262.       RETURN(1)    
  263.    END
  264.  
  265. -- IF not supplied, determine the user executing this procedure
  266.    SET @username = suser_sname()
  267.  
  268.    IF ( (charindex ('\',@username) > 0) OR (@username is NULL) OR (@username = 'sa') )
  269.    BEGIN
  270.         SELECT @username = N'dbo'
  271.    END
  272.  
  273. -- If not supplied, determine the database currently active
  274.    IF (@dbname is NULL)
  275.    BEGIN
  276.       SELECT @dbname = d.name FROM
  277.        master..sysdatabases d, master..sysprocesses p
  278.        WHERE d.dbid = p.dbid AND spid = @@spid
  279.  
  280.    END
  281.  
  282. -- Generate @procname if not supplied
  283.    IF (@procname is NULL)
  284.       BEGIN
  285.  
  286.          SET @currdate = getdate()
  287.  
  288.          SET @yearchar = convert(nvarchar(4),year(@currdate))
  289.          SET @monthchar = right('0'+ rtrim(convert(nvarchar(2),month(@currdate))),2)
  290.          SET @daychar = right('0'+rtrim(convert(nvarchar(2),day(@currdate))),2)
  291.          SET @hourchar = right('0'+rtrim(convert(nvarchar(2),datepart(hh,@currdate))),2)
  292.          SET @minchar = right('0'+rtrim(convert(nvarchar(2),datepart(mi,@currdate))),2)
  293.          SET @secchar = right('0'+rtrim(convert(nvarchar(2),datepart(ss,@currdate))),2)
  294.  
  295.          -- Get default procname if not supplied
  296.          SET @procname = N'web_'+convert(nchar(14),@yearchar+@monthchar+@daychar+@hourchar+@minchar+@secchar)+convert(nvarchar(20),@@spid)+right(rtrim(convert( VARCHAR(25),RAND() )),4)
  297.  
  298.       END
  299.  
  300.    SET @retval = 0
  301.  
  302. -- Create the Web task
  303.    EXECUTE @retval = master..xp_makewebtask  @outputfile, @query, @username, @procname, @dbname,
  304.         @fixedfont, @bold, @italic, @colheaders, @lastupdated, @HTMLheader,
  305.         @templatefile, @webpagetitle, @resultstitle, @URL, @reftext,
  306.         @table_urls, @url_query, @whentype, @targetdate, @targettime,
  307.         @dayflags, @numunits, @unittype, @rowcnt, @maketask, @tabborder,
  308.         @singlerow, @blobfmt, @nrowsperpage, @datachg, @charset, @codepage
  309.     
  310.     IF (@retval <> 0)
  311.     BEGIN
  312.         SET @procname = 'xp_makewebtask'
  313.         RAISERROR(@retval, 11, 1, @procname)
  314.     END
  315.  
  316.    RETURN @retval
  317.  
  318. END
  319. go
  320.  
  321. --====================================================================================
  322. -- sp_dropwebtask: Drops a previously created Web Page Task
  323.  
  324. CREATE PROCEDURE sp_dropwebtask
  325.         @procname nvarchar(128) = NULL,
  326.         @outputfile    nvarchar(255) = NULL
  327. AS
  328. BEGIN
  329.     DECLARE    @retval int
  330.     SET @retval = 0
  331.  
  332.     -- At least one of the parameters have to be NOT NULL
  333.     IF ( (@procname is NULL) AND (@outputfile is NULL) )
  334.     BEGIN
  335.         RAISERROR(16801,11,1)
  336.         RETURN(1)
  337.     END
  338.     
  339.     EXEC @retval = master..xp_dropwebtask @procname, @outputfile
  340.     
  341.     IF (@retval <> 0)
  342.     BEGIN
  343.         SET @procname = 'sp_dropwebtask'
  344.         RAISERROR(@retval,11,1, @procname)
  345.     END
  346.  
  347.     RETURN @retval
  348. END
  349. go
  350.  
  351. --====================================================================================
  352. -- sp_runwebtask: Runs a previously created Web Page Task and creates the
  353. --            web page
  354.  
  355. CREATE PROCEDURE sp_runwebtask
  356.         @procname nvarchar(128) = NULL,
  357.         @outputfile    nvarchar(255) = NULL
  358. AS
  359. BEGIN
  360.     DECLARE    @retval int
  361.     SET @retval = 0
  362.  
  363.     -- At least one of the parameters have to be NOT NULL
  364.     IF ( (@procname is NULL) AND (@outputfile is NULL) )
  365.     BEGIN
  366.         RAISERROR(16803,11,1)
  367.         RETURN(1)
  368.     END
  369.     
  370.     EXEC @retval = master..xp_runwebtask @procname, @outputfile
  371.     
  372.     IF (@retval <> 0)
  373.     BEGIN
  374.         SET @procname = 'sp_runwebtask'
  375.         RAISERROR(@retval,11,1, @procname)
  376.     END
  377.  
  378.     RETURN @retval
  379. END
  380. go
  381.  
  382. --====================================================================================
  383. -- sp_cleanupwebtask: Internal stored procedure called by Enterprise Manager
  384. --            to clean up web
  385. --            task entries after their system task entry has been
  386. --            deleted. This procedure will return success
  387. --            if there is no web task entry associated with the given
  388. --            task id.
  389.  
  390. CREATE PROCEDURE sp_cleanupwebtask
  391.         @taskid  int = 0
  392. AS
  393. BEGIN
  394.     DECLARE    @procname nvarchar(128)
  395.     DECLARE    @retval int
  396.     SET @retval = 0
  397.  
  398.     IF (@taskid = 0)
  399.     RETURN(1)
  400.     SELECT @procname = (SELECT procname FROM msdb..mswebtasks WHERE taskid = @taskid)
  401.  
  402.     --  Return if there is no such task
  403.     IF (@procname is NULL)
  404.     RETURN(1)
  405.  
  406.     EXEC @retval = master..xp_cleanupwebtask @procname
  407.     RETURN @retval
  408. END
  409. go
  410.  
  411. -- sp_enumcodepages: Get a list of supported code pages
  412. --
  413. CREATE PROCEDURE sp_enumcodepages
  414. AS
  415. BEGIN
  416.     DECLARE @retval int
  417.     DECLARE @procname nvarchar(128)
  418.  
  419.     SET @retval = 0
  420.  
  421.     EXEC @retval = master..xp_enumcodepages
  422.  
  423.     IF (@retval <> 0)
  424.     BEGIN
  425.         SET @procname = 'sp_enumcodepages'
  426.         RAISERROR(@retval,11,1, @procname)
  427.     END
  428.  
  429.     RETURN @retval
  430. END
  431. go
  432.  
  433. --====================================================================================
  434. -- sp_convertwebtasks: Converts 6.5 webtasks to 7.0 format
  435. --
  436. CREATE PROCEDURE sp_convertwebtasks
  437. AS
  438. BEGIN
  439.     DECLARE    @retval int
  440.     DECLARE    @procname nvarchar(128)
  441.     DECLARE    @thisproc nvarchar(128)
  442.     DECLARE @wpw_65 varbinary(5)
  443.     DECLARE @TotalConverted    int
  444.     DECLARE    @TotalFailed    int
  445.  
  446.  
  447.     -- Are there any webtasks to convert?
  448.     IF ((SELECT count(*) FROM msdb..mswebtasks) = 0)
  449.         goto DONE
  450.  
  451.     SET @TotalConverted = 0
  452.     SET @TotalFailed = 0
  453.  
  454.     -- Initialize variables
  455.     SET    @thisproc = 'sp_convertwebtasks'
  456.     SET    @retval = 0
  457.     SET    @wpw_65 = 0x00
  458.  
  459.     -- Loop through all tasks and convert to 7.0 format
  460.     DECLARE webtaskCur cursor FOR 
  461.         SELECT procname FROM msdb..mswebtasks
  462.         WHERE substring(wparams,1,2) = @wpw_65        -- version 6.5
  463.  
  464.     OPEN webtaskCur
  465.     FETCH webtaskCur INTO @procname    
  466.     
  467.     WHILE (@@fetch_status = 0)
  468.     BEGIN
  469.         EXEC @retval = master..xp_convertwebtask @procname
  470.         IF (@retval <> 0)
  471.         BEGIN
  472.             
  473.             RAISERROR('%s: Failed to convert webtask from 6.5 to 7.0 format.  You need to use sp_makewebtask to recreate the task',16,1,@thisproc, @procname) WITH LOG
  474.             SET @TotalFailed = @TotalFailed + 1
  475.  
  476.         END
  477.         ELSE
  478.         BEGIN
  479.             
  480.             -- Increment successfully converted task count
  481.             SET @TotalConverted = @TotalConverted + 1
  482.             
  483.             -- Tag webtasks in sysjobs.  Web Assistant tasks are category 4.        
  484.             UPDATE msdb.dbo.sysjobs
  485.             SET category_id = 4
  486.             WHERE name = @procname
  487.  
  488.         END
  489.  
  490.         FETCH webtaskCur INTO @procname
  491.     END
  492.  
  493.     CLOSE webtaskCur
  494.     DEALLOCATE webtaskCur
  495.  
  496.     RAISERROR('%s: %d web tasks converted successfully.  %d webtasks failed to convert.',0,1,@thisproc, @TotalConverted,@TotalFailed) WITH LOG
  497.  
  498. -- Done with conversion
  499.  
  500. DONE:
  501.     RETURN @retval
  502.  
  503. END
  504. go
  505. --====================================================================================
  506. -- sp_readwebtask: retreive web task parameters
  507. --
  508. CREATE PROCEDURE sp_readwebtask
  509.         @procname nvarchar(128) = NULL
  510. AS
  511. BEGIN
  512.     DECLARE @retval int
  513.     SET @retval = 0
  514.  
  515.     -- If the procedure name is NULL, Display a list of web tasks
  516.     IF NOT EXISTS (SELECT * FROM msdb..mswebtasks WHERE procname = @procname)
  517.     BEGIN
  518.         SET @retval = 16815
  519.         RAISERROR(@retval,11,1,@procname)
  520.         RETURN(@retval)
  521.     END
  522.     
  523.     -- Execute xp_readwebtask given the procedure name
  524.     EXEC @retval = master..xp_readwebtask @procname
  525.     
  526.     IF (@retval <> 0)
  527.     BEGIN
  528.         SELECT @procname = 'sp_readwebtask'
  529.         RAISERROR(@retval,11,1, @procname)
  530.     END
  531.  
  532.     RETURN @retval
  533. END
  534. go
  535.  
  536.  
  537. --====================================================================================
  538. GRANT EXECUTE ON sp_makewebtask TO PUBLIC
  539. go
  540. GRANT EXECUTE ON sp_dropwebtask TO PUBLIC
  541. go
  542. GRANT EXECUTE ON sp_runwebtask TO PUBLIC
  543. go
  544. GRANT EXECUTE ON sp_cleanupwebtask TO PUBLIC
  545. go
  546. GRANT EXECUTE ON sp_enumcodepages TO PUBLIC
  547. go
  548. GRANT EXECUTE ON sp_convertwebtasks TO PUBLIC
  549. go
  550. GRANT EXECUTE ON sp_readwebtask TO PUBLIC
  551. go
  552.  
  553. -- Reset system object category
  554. EXEC sp_MS_upd_sysobj_category 2
  555. go
  556.  
  557. -- disallow and reconfigure
  558. EXEC sp_configure 'allow updates', 0
  559. RECONFIGURE WITH OVERRIDE
  560. go
  561.