dbo.GetContentAttributeData.StoredProcedure.sql 13.2 KB
USE [AIADatabaseV5]
GO
/****** Object:  StoredProcedure [dbo].[GetContentAttributeData]    Script Date: 2/1/2018 12:15:55 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetContentAttributeData]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[GetContentAttributeData]
GO

CREATE PROCEDURE [dbo].[GetContentAttributeData] @iContentTypeId INT
AS
BEGIN TRY
	DECLARE @cGetID CURSOR
	DECLARE @cGetProcessedData CURSOR
	DECLARE @iContentDescriptorId INT
	DECLARE @sContentAttributeType VARCHAR(256)
	DECLARE	@iImageContentId INT
	DECLARE @sImageContentTitle VARCHAR(256)
	DECLARE @sImageFileName VARCHAR(50)
	DECLARE @sThumbnailFileName VARCHAR(50)
	DECLARE @sContentAttributeId VARCHAR(8000)
	DECLARE @sContentAttributeValue NVARCHAR(MAX)
	DECLARE @iPrevContentDescriptorId INT
	DECLARE @sAttributeTypeColumnName VARCHAR(3)
	DECLARE @SQL NVARCHAR(MAX)

	SET @sContentAttributeValue = ''
	SET @iPrevContentDescriptorId = 0

	-- create temporary tables
	CREATE TABLE #DataProcess
	(
		ContentDescriptorId INT,
		ContentAttributeType VARCHAR(50),
		ImageContentId INT,
		ImageContentTitle VARCHAR(256),
		ImageFileName VARCHAR(50),
		ThumbnailFileName VARCHAR(50),
		ContentAttributeIds VARCHAR(8000),
		ContentAttributeValues NVARCHAR(MAX)
	)

	CREATE TABLE #XMLData
	(
		id INT,
		icId INT,
		tl VARCHAR(256),
		cp VARCHAR(50),
		ti VARCHAR(50),
		bs NVARCHAR(MAX),
		br NVARCHAR(MAX),
		vo NVARCHAR(MAX),
		ms NVARCHAR(MAX),
		im NVARCHAR(MAX),
		sm NVARCHAR(MAX),
		lsm NVARCHAR(MAX),
		gr VARCHAR(6)
	)

	-- define the forward only, read-only cursor 
	SET @cGetID = CURSOR FAST_FORWARD 
	FOR
	SELECT cd.Id, cat.Name, ic.Id as icId, ic.Title, ic.FileName, ic.ThumbnailFileName, left(aval,LEN(aval)-1) as aval
	 FROM 
	  ContentDescriptor cd 
	  INNER JOIN ImageContent ic ON ic.ContentDescriptorId = cd.id AND cd.isActive = 'Y'
	  INNER JOIN ContentDescriptorToAttributeMap cdmap ON cd.id = cdmap.ContentDescriptorId AND cd.ContentTypeId = @iContentTypeId
	  INNER JOIN ContentAttribute ca ON ca.id = cdmap.ContentAttributeId
	  INNER JOIN ContentAttributeType cat ON ca.AttributeTypeId = cat.id AND 
	  cat.Name IN ('Body System','Body Region','View Orientation','Medical Specialty','Gender','Image Type','Description','Long Description') 
	  CROSS APPLY (SELECT CAST(ca1.id as VARCHAR)+','
	 FROM 
	  ContentDescriptorToAttributeMap cdmap1 
	  INNER JOIN ContentAttribute ca1 ON ca1.id = cdmap1.ContentAttributeId
	  INNER JOIN ContentAttributeType cat1 ON ca1.AttributetypeId = cat1.id AND cat1.id=cat.id
	  WHERE cdmap1.ContentDescriptorId = cd.id FOR XML PATH('')) pre_trimmed(aval)
	  GROUP BY cd.id,cat.name,ic.Id,ic.Title,ic.FileName,ic.ThumbnailFileName,aval 

	-- open & fetch the cursor variables into the local variables
	OPEN @cGetID 
	FETCH NEXT FROM @cGetID INTO @iContentDescriptorId, @sContentAttributeType, @iImageContentId, @sImageContentTitle,
		@sImageFileName, @sThumbnailFileName, @sContentAttributeId

	-- start of while loop
	 WHILE @@FETCH_STATUS = 0
	  BEGIN
		SET @sContentAttributeValue = ''
		
		SELECT @sContentAttributeValue = CONVERT(NVARCHAR(MAX), ContentAttribute.AttributeValue) + ', ' +@sContentAttributeValue
		FROM ContentAttribute WHERE ContentAttribute.Id IN (SELECT item from dbo.fnSplit(@sContentAttributeId,',')) 
		order by CONVERT(NVARCHAR(MAX), ContentAttribute.AttributeValue) DESC
		IF LEN(@sContentAttributeValue) > 0
		BEGIN
			SET @sContentAttributeValue = SUBSTRING(@sContentAttributeValue,1,LEN(@sContentAttributeValue)-1)
		END
		INSERT INTO #DataProcess(ContentDescriptorId, ContentAttributeType, ImageContentId, ImageContentTitle,
			ImageFileName, ThumbnailFileName, ContentAttributeIds, ContentAttributeValues)	
		VALUES(@iContentDescriptorId, @sContentAttributeType, @iImageContentId, @sImageContentTitle, 
			@sImageFileName, @sThumbnailFileName, @sContentAttributeId, @sContentAttributeValue)

		FETCH NEXT FROM @cGetID INTO @iContentDescriptorId, @sContentAttributeType, @iImageContentId, @sImageContentTitle,
		@sImageFileName, @sThumbnailFileName, @sContentAttributeId
	-- end of while loop
	END
	-- close the cursor to free up resources
	CLOSE @cGetID
	DEALLOCATE @cGetID

	SET @cGetProcessedData = CURSOR FAST_FORWARD 
	FOR
	SELECT ContentDescriptorId, ContentAttributeType, ImageContentId, ImageContentTitle, ImageFileName, 
		ThumbnailFileName, ContentAttributeIds, ContentAttributeValues FROM #DataProcess ORDER BY ContentDescriptorId
	
	-- open & fetch the cursor variables into the local variables
	OPEN @cGetProcessedData 
	FETCH NEXT FROM @cGetProcessedData INTO @iContentDescriptorId, @sContentAttributeType, @iImageContentId, @sImageContentTitle, 
		@sImageFileName, @sThumbnailFileName, @sContentAttributeId, @sContentAttributeValue
	WHILE @@FETCH_STATUS = 0
	  BEGIN
		SET @SQL = ''
		SET @sAttributeTypeColumnName = CASE @sContentAttributeType WHEN 'Body System' THEN 'bs'
			WHEN 'Body Region' THEN 'br'
			WHEN 'View Orientation' THEN 'vo'
			WHEN 'Medical Specialty' THEN 'ms'
			WHEN 'Gender' THEN 'gr'
			WHEN 'Image Type' THEN 'im'
			WHEN 'Description' THEN 'sm'
			WHEN 'Long Description' THEN 'lsm'
			END
		-- to handle the single quotes in the attribute value	
		SET @sContentAttributeValue = REPLACE(@sContentAttributeValue,'''','''''')
		SET @sImageContentTitle = REPLACE(@sImageContentTitle,'''','''''')
		
		IF @iContentDescriptorId != @iPrevContentDescriptorId
		BEGIN
			SET @SQL = 'INSERT INTO #XMLData (id, icId, tl, cp, ti, '+@sAttributeTypeColumnName+')
			VALUES('+CONVERT(VARCHAR(20),@iContentDescriptorId)+','''+CONVERT(VARCHAR(20),@iImageContentId)+''','''+@sImageContentTitle+'''
			,'''+@sImageFileName+''','''+@sThumbnailFileName+''','''+@sContentAttributeValue+''')'
		END
		ELSE
		BEGIN
			SET @SQL = 'UPDATE #XMLData SET '+@sAttributeTypeColumnName+' = '''+@sContentAttributeValue+''' WHERE id = '+CONVERT(VARCHAR(20),@iContentDescriptorId)
		END
		
		-- to execute the dynamic query
		EXEC sp_executesql @SQL
		SET @iPrevContentDescriptorId = @iContentDescriptorId
		
		FETCH NEXT FROM @cGetProcessedData INTO @iContentDescriptorId, @sContentAttributeType, @iImageContentId, @sImageContentTitle, 
		@sImageFileName, @sThumbnailFileName, @sContentAttributeId, @sContentAttributeValue

	END
	SELECT * FROM #XMLData FOR XML RAW ('it')
	-- close the cursor to free up resources
	CLOSE @cGetProcessedData
	DEALLOCATE @cGetProcessedData
	-- drop the temporary tables
	DROP TABLE #XMLData
	DROP TABLE #DataProcess
END TRY
BEGIN CATCH
		SELECT Error_Message() as SPStatus
END CATCH


GO