I know we cannot use declare in a view, however I have no choice now...
is there a way I can use the below in a view, and how can this be done?
Declare @q varchar(MAX)
;WITH N AS (
SELECT DISTINCT FD_2A7417DC Pvt_Col
FROM FD_Documents
), C (Cols) As (
SELECT STUFF((SELECT ',' + QUOTENAME(Pvt_Col)
FROM N
ORDER BY Pvt_Col
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
)
SELECT @q
= 'SELECT ID_Number, Company, Date_Of_Birth, Department, Name
, Surname, Passport_No, Job_Title, Start_Date
, End_Date, Type
, ' + Cols + '
FROM (SELECT FD_0D39C6B0 AS Company, FD_DDD24E25 AS Date_Of_Birth, FD_74290EA9 AS Department, FD_2A7417DC AS Document_Type, FD_E3421C61 AS Name
, FD_2B9CFA8C AS Surname, FD_96990BE2 AS ID_Number, FD_E6621D8A as Passport_No, FD_3744C28A AS Job_Title, FD_903EBB60 as Start_Date
, FD_9BBAD0CA AS End_Date, FD_AE108F93 as Type
FROM FD_Documents
) x
PIVOT
(COUNT(Document_Type) FOR Document_Type in (' + Cols + ')) pvt'
FROM C
execute(@q)
Update 15/08/2014
This is were I'm at now.
create function dbo.tvf_getDocumentType()
returns @t table(ColName int FD_0D39C6B0 AS Company, FD_DDD24E25 AS Date_Of_Birth, FD_74290EA9 AS Department, FD_2A7417DC AS Document_Type, FD_E3421C61 AS Name
, FD_2B9CFA8C AS Surname, FD_96990BE2 AS ID_Number, FD_E6621D8A as Passport_No, FD_3744C28A AS Job_Title, FD_903EBB60 as Start_Date
, FD_9BBAD0CA AS End_Date, FD_AE108F93 as Type)
as
begin
Declare @q varchar(MAX)
;WITH N AS (
SELECT DISTINCT FD_2A7417DC Pvt_Col
FROM FD_Documents
), C (Cols) As (
SELECT STUFF((SELECT ',' + QUOTENAME(Pvt_Col)
FROM N
ORDER BY Pvt_Col
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
)
SELECT @q
= 'SELECT ID_Number, Company, Date_Of_Birth, Department, Name
, Surname, Passport_No, Job_Title, Start_Date
, End_Date, Type
, ' + Cols + '
FROM (SELECT FD_0D39C6B0 AS Company, FD_DDD24E25 AS Date_Of_Birth, FD_74290EA9 AS Department, FD_2A7417DC AS Document_Type, FD_E3421C61 AS Name
, FD_2B9CFA8C AS Surname, FD_96990BE2 AS ID_Number, FD_E6621D8A as Passport_No, FD_3744C28A AS Job_Title, FD_903EBB60 as Start_Date
, FD_9BBAD0CA AS End_Date, FD_AE108F93 as Type
FROM FD_Documents
) x
PIVOT
(COUNT(Document_Type) FOR Document_Type in (' + Cols + ')) pvt'
FROM C
execute(@q)
end
Error Message. Msg 102, Level 15, State 1, Procedure tvf_getDocumentType, Line 2 Incorrect syntax near 'FD_0D39C6B0'.
Im now going into uncharted water with this code for me.