SQL Server Examples Part 1

-- ****************************************************************************      
-- * spDeleteObj: Procedure for deleting an object from the database.         *
-- * - @objName - The object to delete                                        *
-- * - @objType - The type of the object                                      *
-- *      - 3 = table                                                         *
-- *      - 4 = procedure                                                     *
-- * - @verbose - 1 show status message; 0 do not show messages               *
-- ****************************************************************************      
if exists (select * from sysobjects where id = object_id('spDeleteObj') 
   and sysstat & 0xf = 4)    
begin    
   DROP procedure spDeleteObj    
end    
go
create procedure spDeleteObj(@objName varchar(50), @objType int, @verbose bit)    
as  
declare @objTypeName varchar(20)    
	if (@objType = 4) begin    
		set @objTypeName = 'procedure'    
	end    
	else if (@objType = 3) begin    
		set @objTypeName = 'table'    
	end    
	if exists (select * from sysobjects where id = object_id(@objName) 
		and sysstat & 0xf = @objType)    
	begin    
		exec('drop ' + @objTypeName + ' ' + @objName)    
		if (@verbose = 1) begin     
			raiserror('%s %s deleted.', 0, 1, @objTypeName, @objName)    
		end    
	end    
else if (@verbose = 1) begin    
	raiserror('%s %s does not exist....', 0, 1, @objTypeName, @objName)    
end    
go
-- ****************************************************************************      
-- * spParseXML: Example procedure for parsing XML with a stored procedure    *
-- * - @xmlDocument  - the contents of the XML document                       *
-- * In the select statement we search for '/root/Category/Product'. Once     *
-- * found we are on the product level. To retrieve the Category data we have *
-- * to move one level back; that is why we use the two dots and the forward  *
-- * slash.                                                                   *
-- ****************************************************************************      
exec spDeleteObj 'spParseXML', 4, 0    
go    
create procedure spParseXML(@xmlDocument varchar(1000))
as
declare @docHandle int  
	exec sp_xml_preparedocument @docHandle output, @xmlDocument    
	select    
		*
	from
		openxml(@docHandle, '/root/Category/Product', 1)    
		with (categoryid   int    '../@CategoryId',     
		productid   int    '@ProductId',     
		categoryname  varchar(50) '../@CategoryName',    
		description  varchar(50) '@Description')    
	exec sp_xml_removedocument @dochandle  
	go    

DECLARE @xmlDoc VARCHAR(8000)    
SET @xmlDoc =    
	'<root>    
		<Category CategoryId="1" CategoryName="General Books">    
			<Product ProductId="1" Description="Cooking for you" />    
		</Category>  
		<Category CategoryId="1" CategoryName="General Books">    
			<Product ProductId="2" Description="Cooking for you" />    
		</Category>    
		<Category CategoryId="1" CategoryName="General Books">    
			<Product ProductId="3" Description="Cooking for you" />    
		</Category>  
		<Category CategoryId="2" CategoryName="Special books">    
			<Product ProductId="4" Description="Cooking for you" />    
		</Category>    
	</root>'    
	exec spParseXML @xmlDoc    
	go
-- ****************************************************************************
-- * SELECT TOP <x> WITH TIES * FROM <table>                                  *
-- *                                                                          *
-- * See example below (table "tiesExample")                                  *
-- * Because we specify that we want the TOP 5 rows we expect no more then    *
-- * 5 rows. BUT: we also specified WITH TIES. Because row 6 in the table     *
-- * (according to the sortorder!) has the same value (a tie) as row 5 it     *
-- * is also returned in the resultset.                                       *
-- ****************************************************************************
exec spDeleteObj 'tiesExample', 3, 0    
go    
create table tiesExample    
(  
	id int,
	price int
)    
set nocount on    
insert into tiesExample values (1, 20)    
insert into tiesExample values (2, 30)    
insert into tiesExample values (3, 40)    
insert into tiesExample values (4, 50)    
insert into tiesExample values (5, 60)    
insert into tiesExample values (6, 60)    
set nocount off  

select 
	top 5 with ties * 
from 
	tiesExample    
order by 
	price asc
Share

Leave a Reply

Your email address will not be published. Required fields are marked *