Create dynamic column in SQL as VARCHAR MAX - sql

I am using a standard SQL query to determine where indexes are needed however one of the columns which gives you the TSQL to build the index is getting cutoff because there are so many fields in the index. The columns themselves also appear cutoff. How do I modify it so CreateIndexStatement is a VARCHAR MAX which doesn't get cutoff:
SELECT sys.objects.name
, (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans) AS Impact
, 'CREATE NONCLUSTERED INDEX ix_IndexName ON ' + sys.objects.name COLLATE DATABASE_DEFAULT + ' ( ' + IsNull(mid.equality_columns, '') + CASE WHEN mid.inequality_columns IS NULL
THEN ''
ELSE CASE WHEN mid.equality_columns IS NULL
THEN ''
ELSE ',' END + mid.inequality_columns END + ' ) ' + CASE WHEN mid.included_columns IS NULL
THEN ''
ELSE 'INCLUDE (' + mid.included_columns + ')' END + ';' AS CreateIndexStatement
, mid.equality_columns
, mid.inequality_columns
, mid.included_columns
FROM sys.dm_db_missing_index_group_stats AS migs
INNER JOIN sys.dm_db_missing_index_groups AS mig ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle AND mid.database_id = DB_ID()
INNER JOIN sys.objects WITH (nolock) ON mid.OBJECT_ID = sys.objects.OBJECT_ID
WHERE (migs.group_handle IN
(
SELECT TOP (500) group_handle
FROM sys.dm_db_missing_index_group_stats WITH (nolock)
ORDER BY (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans) DESC))
AND OBJECTPROPERTY(sys.objects.OBJECT_ID, 'isusertable')=1
ORDER BY 2 DESC , 3 DESC

Just cast the first column in the list as a varchar(max)
SELECT cast(ColumnA as varchar(max))
+ ColumnB + ColumnC + .... + ColumnZ AS SomeColumn
FROM SomeTable

Related

SQL get dynamic query result into another query

I would like to get, for each line, the result of my ReqCount query directly into my main SELECT
(the main query is simplified on purpose).
I've tried using the EXEC sp_executesql but it was unsuccessful.
How can I manage to do this?
BEGIN
SELECT DISTINCT
TBL.name AS TableName
, IDX.type_desc
, COL.name
, 'SELECT MAX(occurs) FROM (SELECT ' + COL.name + ', count(*) as occurs FROM ' + TBL.name
+ ' GROUP BY ' + COL.name + ') a' as ReqCount
FROM sys.tables AS TBL
INNER JOIN sys.schemas SCH ON TBL.schema_id = SCH.schema_id AND TBL.name <> 'sysdiagrams'
INNER JOIN sys.indexes IDX ON TBL.object_id = IDX.object_id AND IDX.type = 0
LEFT JOIN sys.columns COL ON COL.object_id = TBL.object_id AND (COL.name LIKE '%id' OR COL.name LIKE '%code')
END
TableName type_desc name ReqCount
t_intervention_instruction HEAP NULL NULL
t_constat HEAP con_code SELECT MAX(occurs) FROM (SELECT con_code, count(*) as occurs FROM t_constat GROUP BY con_code) a
t_cri_clientele HEAP NULL NULL
t_ope_sur_branchement HEAP osb_id SELECT MAX(occurs) FROM (SELECT osb_id, count(*) as occurs FROM t_ope_sur_branchement GROUP BY osb_id) a

Conversion failed when converting the nvarchar value '29449,29446,29450,29534' to data type int

I am create a stored procedure in SQL and I get the following error when I execute the query:
Conversion failed when converting the nvarchar value '11021,78542,12456,24521' to data type int.
Any idea why?
SELECT
A.Art_ID, A.Title
FROM
Art A
INNER JOIN
Iss I ON A.Iss_ID = I.Iss_ID
INNER JOIN
Sections S ON A.Section_ID = S.Section_ID
INNER JOIN
iPadSec IPS ON A.Sec_ID = IPS.Sec_ID
WHERE
A.Art_ID IN (SELECT CAST(Art_IDs AS int) /***error happens here***/
FROM Book_Art b
WHERE Sub_ID = 68)
AND I.Iss > dateadd(month, -13, getdate())
AND A.Active = 1
AND IPS.Active = 1
AND A.PDate <= getdate()
ORDER BY
PDate DESC, Art_ID DESC;
You cannot do what you want using in. First, it is a really bad idea to store ids in lists in strings. You should be using a junction table.
That said, sometimes this is necessary. You can rewrite this line of code as:
EXISTS (SELECT 1 /***error happens here***/
FROM Book_Art b
WHERE Sub_ID = 68 AND
',' + Art_IDs + ',' LIKE '%,' + cast(A.Art_ID as varchar(255)) + ',%'
)
However, the performance would generally be on the lousy side and there is little prospect of speeding this up without fixing the data structure. Use a junction table instead of a string to store lists.
Adding this line works for me.
declare #ids varchar(1000)
select #ids = art_ids from book_art where sub_id = #Sub_ID
EXECUTE ( 'SELECT A.Art_ID, A.Title'
+ ' FROM Art A'
+ ' INNER JOIN Iss I ON A.Iss_ID = I.Iss_ID'
+ ' INNER JOIN Sections S ON A.Section_ID = S.Section_ID'
+ ' INNER JOIN iPadSec IPS ON A.Sec_ID = IPS.Sec_ID'
+ ' WHERE A.Art_ID IN (' + #ids + ')'
+ ' AND I.Iss > dateadd(month, -13, getdate())'
+ ' AND A.Active = 1'
+ ' AND IPS.Active = 1'
+ ' AND A.PDate <= getdate()'
+ ' ORDER BY PDate DESC,'
+ ' Art_ID DESC;'
)
END
Thank you all for your help :)

Reducing execution time in a run-time constructed query when using views

I have a query that I am using where I only know what variables will be retrieved at run time. I'm using a view to pull all of the variables into a single data set then querying against that data set. It looks something like this:
All variables in the SQL db:
Table A.1, Table A.2, Table A.3
Table B.1, Table B.2, Table B.3
Table C.1, Table C.2, Table C.3
At run time I know that I want the variables Table A.1 and Table A.2 where Table A.1 = SomeNumber. I therefore create a view as:
View 1 = Table A.1, Table B.1
I then query against that view where Table A.1 = SomeNumber
This approach seems to work but it take a long time (30 seconds) to return results because I have 20+ tables and 100+ variables. There are 2K+ records to query against.
Any ideas on how I can improve the response time of this query?
******* HERE IS THE ACTUAL QUERY **********
USE [ays_restructuring_league_live];
GO
ALTER PROCEDURE [dbo].[sp_getVolunteerSummaryDetails]
(#LeagueId int, #p_SearchCriteria varchar(MAX), #p_DataflowId int=null)
WITH
EXECUTE AS CALLER
AS
Begin
SET NOCOUNT ON;
DECLARE #Statement AS varchar(MAX);
Declare #p_DataFieldName as varchar(max);
declare #p_Label as varchar(max);
if (CHARINDEX('DisplayId = ''1'' ',#p_SearchCriteria)>0)/* for multiple record*/
begin
Select b.* into #finalTable from(
SELECT distinct VSI.VolunteerSeasonalId,
VI.VolunteerId,
right(MUS.DetailIdURL_Structure + cast(convert(varchar(max),VI.VolunteerId) as varchar(max)),MUS.DetailIdURL_Length) as NewVolunteerId,
right(MUS.OtherURL_Structure + cast(convert(varchar(max),VSI.SeasonId) as varchar(max)),MUS.OtherURL_Length) as NewSeasonId,
UI.FirstName as VolunteerFirstName,
UI.LastName as VolunteerLastName,
UI.LastName+ ', '+ UI.FirstName as VolunteerName,
UI.Email as VolunteerEmail,
VI.ShirtSizeId,
MUSZ.Size as ShirtSize,
UI.HomePhone as VolunteerHomePhone,
UI.MobilePhone as VolunteerMobilePhone,
UI.WorkPhone as VolunteerWorkPhone,
--convert(varchar,UI.BirthDate,101) as VolunteerBirthDate,
--UI.Address,
--UI.StateId,
--MST.Abbreviation as State,
--UI.CityId,
--MC.Abbreviation as City,
--UI.Zip,
--VI.DrivingLicenceNumber,
--UI.Gender as VolunteerGender,
--VSI.CreatedBy,
--VSI.CreatedOn,
--VSI.UpdatedBy,
--VSI.UpdatedOn,
VSI.StatusId,
VSI.SeasonId,
(SELECT substring ( (SELECT ', ' + cast (b.[Day] as varchar)
FROM (select MD.[Day]
from dbo.Master_Day MD where MD.DayID in (select items from dbo.udf_Split(PP.DaysCanNotPractice, ',')))
b for xml path ('')),2,10000)) as DaysCanNotPractice,
(SELECT substring ( (SELECT ', ' + cast (b.[Time] as varchar)
FROM (select PT.[Time]
from dbo.PreferedTime PT where PT.PreferedTimeId in (select items from dbo.udf_Split(PP.TimeCanNotPractice, ',')))
b for xml path ('')),2,10000)) as TimeCanNotPractice,
--PP.LocationId,
--PP.LocationRankId,
(select substring((select ', ' + cast (b.ShortName as varchar)
from (select ML.ShortName
from dbo.Master_Location ML
where ML.LocationID in (select items from dbo.udf_Split(PP.LocationId, ',')))
as b for xml path('')),2,1000000)) as ShortName,
(SELECT MR.[Rank]
FROM dbo.Master_Rank MR
WHERE MR.RankID = PP.LocationRankId) as LocationRank,
--PP.DayOfWeekId,
--PP.DayOfWeekRankId,
(select substring((select ', ' + cast (b.[Day] as varchar)
from (select MD.[Day] from dbo.Master_Day MD
where MD.DayID in (select items from dbo.udf_Split(PP.DayOfWeekId,',')))
as b for xml path('')),2,1000000)) as [DayOfWeek],
(select MR.[Rank]
from dbo.Master_Rank MR
where MR.RankID = PP.DayOfWeekRankId)AS DayOfWeekRank,
--PP.TimeOfDayId,
--PP.TimeOfDayRankId,
(select substring((select ', ' + cast (b.[Time] as varchar)
from (select [Time]
from dbo.PreferedTime PT
where PT.PreferedTimeId in (select items from dbo.udf_Split(PP.TimeOfDayId,',')))
as b for xml path('')),2,1000000)) as TimeOfDay,
(SELECT MR.[Rank]
FROM dbo.Master_Rank MR
WHERE MR.RankID = PP.TimeOfDayRankId) as TimeOfDayRank,
--case when MVP.VolunteerPosition is null then '' else ( case when MD.Abbreviation is null then MVP.VolunteerPosition else '('+MD.Abbreviation+') '+MVP.VolunteerPosition end)end as VolunteeredPosition,
--case when MVP.VolunteerPosition is null then '' else ( case when VRP.PositionId>5 then MVP.VolunteerPosition else '('+MD.Abbreviation+') '+MVP.VolunteerPosition end)end as VolunteeredPosition,
case when MVP.VolunteerPosition is null then '' else
case when VRP.PositionId>5 then MVP.VolunteerPosition else
case when MD.Abbreviation is null then MVP.VolunteerPosition else
'('+MD.Abbreviation+') '+MVP.VolunteerPosition end
end
end as VolunteeredPosition,
case when VRP.PositionId is null then '' else convert(varchar(50),VRP.PositionId) end as VolunteeredPositionId,
case when VRP.DivisionId is null then '' else convert(varchar(50),VRP.DivisionId) end as VolunteeredDivisionId,
'' as AssignedPosition,
'' as AssignedVolunteerPositionId,
'' as AssignedDivisionId,
(SELECT substring ( (SELECT '; ' + cast (b.PlayerName AS varchar(max))
FROM (SELECT DISTINCT ('('+MD.Abbreviation+') '+ PPI.PlayerLastName + ', '+PPI.PlayerFirstName+'$'+'001'+right(MUS.DetailIdURL_Structure + cast(convert(varchar(max),PPI.PlayerId) as varchar(max)),MUS.DetailIdURL_Length)) AS PlayerName
FROM dbo.Player_PermanentInfo PPI,dbo.Player_SeasonalInfo PSI,dbo.Master_Division MD
WHERE (PPI.ParentId1=UI.UserId or PPI.ParentId2=UI.UserId)
and PSI.PlayerId=PPI.PlayerId
and PSI.IsAvailable=1 and PSI.SeasonId=VSI.SeasonID
and PSI.DivisionId=MD.DivisionId
)b FOR XML PATH ( '' )),2,100000))AS PlayerName,
/*
(SELECT substring ( (SELECT ';' + cast (b.PlayerLastName AS varchar(max))
FROM (SELECT DISTINCT PPI.PlayerLastName
FROM dbo.Player_PermanentInfo PPI,dbo.Player_SeasonalInfo PSI,dbo.Master_Division MD
WHERE (PPI.ParentId1=UI.UserId or PPI.ParentId2=UI.UserId)
and PSI.PlayerId=PPI.PlayerId
and PSI.IsAvailable=1 and PSI.SeasonId=VSI.SeasonID
and PSI.DivisionId=MD.DivisionId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS PlayerLastName,
(SELECT substring ( (SELECT ';' + cast (b.PlayerFirstName AS varchar(max))
FROM (SELECT DISTINCT PPI.PlayerFirstName
FROM dbo.Player_PermanentInfo PPI,dbo.Player_SeasonalInfo PSI,dbo.Master_Division MD
WHERE (PPI.ParentId1=UI.UserId or PPI.ParentId2=UI.UserId)
and PSI.PlayerId=PPI.PlayerId
and PSI.IsAvailable=1 and PSI.SeasonId=VSI.SeasonID
and PSI.DivisionId=MD.DivisionId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS PlayerFirstName,*/
/*(SELECT substring ((SELECT ','
+ cast (b.ColorID AS varchar)
FROM (SELECT DISTINCT (VBGD.ColorID)
FROM dbo.VolunteerBackGroundDetail VBGD,dbo.Master_Color MCL
WHERE MCL.ColorID= VBGD.ColorID
and VBGD.VolunteerId = VSI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS Result,*/
(SELECT substring((SELECT ','
+ cast (b.CheckTypeID AS varchar)
FROM (SELECT DISTINCT (VBI.CheckTypeID)
FROM dbo.Volunteer_BackgroundInfo VBI
WHERE VBI.VolunteerId = VSI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS BGCheckType,
(SELECT substring ((SELECT ','
+ cast (b.ColorName AS varchar)
FROM (SELECT DISTINCT (MCL.ColorName)
FROM dbo.Volunteer_BackgroundInfo VBI,dbo.Master_Color MCL
WHERE MCL.ColorID= VBI.ColorID
and VBI.VolunteerId = VI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS BGCheckResult,
/*(SELECT substring((SELECT ','
+ cast (b.CheckType AS varchar)
FROM (SELECT DISTINCT (MVCT.CheckType)
FROM dbo.Volunteer_BackgroundInfo VBI,dbo.Master_VolunteerCheckType MVCT
WHERE VBI.VolunteerId = VSI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
and VBI.CheckTypeID=MVCT.CheckTypeId)
b
FOR XML PATH ( '' )),
2,
100000
))
AS CheckType,*/
(SELECT substring((SELECT ','
+ cast (b.DatePerformed AS varchar)
FROM (SELECT DISTINCT Convert(varchar,VBI.DatePerformed,101) as DatePerformed
FROM dbo.Volunteer_BackgroundInfo VBI
WHERE VBI.VolunteerId = VI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
)
b FOR XML PATH ( '' )),2,100000))AS BGCheckDate,
/*(SELECT substring((SELECT ','+ cast(b.EventId as varchar(max))
from(select distinct VCD.EventId
from CheckIn_VolunteerCheckInDetails VCD,CheckIn_CoachCheckInDetails CCD
where VCD.EventId=CCD.EventId
and (VCD.VolunteerSeasonalId=VSI.VolunteerSeasonalId or CCD.VolunteerSeasonalId=VSI.VolunteerSeasonalId))
b for xml path('')),2,100000)) as CheckInEventID,*/
--'' as CheckInEventID,
/*(SELECT substring((SELECT ', '+ cast(b.EventName as varchar(max))
from(select distinct CEM.EventName
from CheckIn_EventMaster CEM, CheckIn_VolunteerCheckInDetails VCD,CheckIn_CoachCheckInDetails CCD
where CEM.CheckInEventId=VCD.EventId AND CEM.CheckInEventId=CCD.EventId
and (VCD.VolunteerSeasonalId=VSI.VolunteerSeasonalId or CCD.VolunteerSeasonalId=VSI.VolunteerSeasonalId))
b for xml path('')),2,100000)) as CheckInEventName,*/
/*(SELECT substring((SELECT ','+ cast(b.EventId as varchar(max))
from(select distinct VCD.EventId
from CheckIn_VolunteerCheckInDetails VCD
where VCD.VolunteerSeasonalId=VSI.VolunteerSeasonalId)
b for xml path('')),2,100000)) as CheckInEventID,
(SELECT substring((SELECT ', '+ cast(b.EventName as varchar(max))
from(select distinct CEM.EventName
from CheckIn_EventMaster CEM, CheckIn_VolunteerCheckInDetails VCD
where CEM.CheckInEventId=VCD.EventId
and VCD.VolunteerSeasonalId=VSI.VolunteerSeasonalId)
b for xml path('')),2,100000)) as CheckInEventName,*/
/*(SELECT substring((SELECT ','
+ cast (b.DatePerformed AS varchar)
FROM (SELECT DISTINCT Convert(varchar,VBI.DatePerformed,101) as DatePerformed
FROM dbo.Volunteer_BackgroundInfo VBI
WHERE VBI.VolunteerId = VSI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS DatePerformed,*/
/*case when exists(select *
from dbo.VolunteerApproval
where VolunteerApproval.VolunteerSeasonalID = VSI.VolunteerSeasonalId
and VolunteerApproval.LeagueId = VSI.LeagueId
and VolunteerApproval.ApprovedStatus = 1) then 'i_tick.gif' else 'remove_Icon.png' end as IsApproved, */
VSI.VolunteerSeasonalStatusId as Approved,
case when VSI.VolunteerSeasonalStatusId = 1 then 'i_tick.gif' else 'remove_Icon.png' end as IsApproved ,
--,MS.SeasonName
'1' as DisplayId,
case when VSI.SeasonId = 8 then '2014/15 Regular Season' else
case when VSI.SeasonId = 7 then '2013/14 Regular Season' else '2014/15 FYBA Fall Academy'
end
end as SeasonName,
VSI.SchedulingPriority
--into #finalTable
FROM dbo.Master_Url_Setting MUS, dbo.Volunteer_Info VI
inner join dbo.Volunteer_SeasonalInfo VSI on VSI.VolunteerId = VI.VolunteerId
inner join User_Info UI on UI.UserId=VI.UserId
inner JOIN dbo.Volunteer_Requested_Position VRP
ON VRP.VolunteerSeasonalId = VSI.VolunteerSeasonalId
LEFT OUTER JOIN dbo.Master_UniformSize MUSZ
ON MUSZ.UniformSizeId = VI.ShirtSizeId
left OUTER JOIN dbo.PracticePreference PP
ON PP.VolunteerSeasonalId = VSI.VolunteerSeasonalId
--left OUTER JOIN dbo.Volunteer_Requested_Position VRP
--ON VRP.VolunteerSeasonalId = VSI.VolunteerSeasonalId
left outer join dbo.Master_Division MD
ON VRP.DivisionId = MD.DivisionId
left outer join dbo.Master_VolunteerPosition MVP
ON MVP.VolunteerPositionId = VRP.PositionId
WHERE VSI.IsAvailable = 1
AND VSI.LeagueId = #LeagueId
and VSI.Seasonid in (7,8,9)
--and VSI.VolunteerId=878
union
SELECT distinct VSI.VolunteerSeasonalId,
VI.VolunteerId,
right(MUS.DetailIdURL_Structure + cast(convert(varchar(max),VI.VolunteerId) as varchar(max)),MUS.DetailIdURL_Length) as NewVolunteerId,
right(MUS.OtherURL_Structure + cast(convert(varchar(max),VSI.SeasonId) as varchar(max)),MUS.OtherURL_Length) as NewSeasonId,
UI.FirstName as VolunteerFirstName,
UI.LastName as VolunteerLastName,
UI.LastName+ ', '+ UI.FirstName as VolunteerName,
UI.Email as VolunteerEmail,
VI.ShirtSizeId,
MUSZ.Size as ShirtSize,
UI.HomePhone as VolunteerHomePhone,
UI.MobilePhone as VolunteerMobilePhone,
UI.WorkPhone as VolunteerWorkPhone,
--convert(varchar,UI.BirthDate,101) as VolunteerBirthDate,
--UI.Address,
--UI.StateId,
--MST.Abbreviation as State,
--UI.CityId,
--MC.Abbreviation as City,
--UI.Zip,
--VI.DrivingLicenceNumber,
--UI.Gender as VolunteerGender,
--VSI.CreatedBy,
--VSI.CreatedOn,
--VSI.UpdatedBy,
--VSI.UpdatedOn,
VSI.StatusId,
VSI.SeasonId,
(SELECT substring ( (SELECT ', ' + cast (b.[Day] as varchar)
FROM (select MD.[Day]
from dbo.Master_Day MD where MD.DayID in (select items from dbo.udf_Split(PP.DaysCanNotPractice, ',')))
b for xml path ('')),2,10000)) as DaysCanNotPractice,
(SELECT substring ( (SELECT ', ' + cast (b.[Time] as varchar)
FROM (select PT.[Time]
from dbo.PreferedTime PT where PT.PreferedTimeId in (select items from dbo.udf_Split(PP.TimeCanNotPractice, ',')))
b for xml path ('')),2,10000)) as TimeCanNotPractice,
--PP.LocationId,
--PP.LocationRankId,
(select substring((select ', ' + cast (b.ShortName as varchar)
from (select ML.ShortName
from dbo.Master_Location ML
where ML.LocationID in (select items from dbo.udf_Split(PP.LocationId, ',')))
as b for xml path('')),2,1000000)) as ShortName,
(SELECT MR.[Rank]
FROM dbo.Master_Rank MR
WHERE MR.RankID = PP.LocationRankId) as LocationRank,
--PP.DayOfWeekId,
--PP.DayOfWeekRankId,
(select substring((select ', ' + cast (b.[Day] as varchar)
from (select MD.[Day] from dbo.Master_Day MD
where MD.DayID in (select items from dbo.udf_Split(PP.DayOfWeekId,',')))
as b for xml path('')),2,1000000)) as [DayOfWeek],
(select MR.[Rank]
from dbo.Master_Rank MR
where MR.RankID = PP.DayOfWeekRankId)AS DayOfWeekRank,
--PP.TimeOfDayId,
--PP.TimeOfDayRankId,
(select substring((select ', ' + cast (b.[Time] as varchar)
from (select [Time]
from dbo.PreferedTime PT
where PT.PreferedTimeId in (select items from dbo.udf_Split(PP.TimeOfDayId,',')))
as b for xml path('')),2,1000000)) as TimeOfDay,
(SELECT MR.[Rank]
FROM dbo.Master_Rank MR
WHERE MR.RankID = PP.TimeOfDayRankId) as TimeOfDayRank,
'' as VolunteeredPosition,
'' as VolunteeredPositionId,
'' as VolunteeredDivisionId,
case when AMVP.VolunteerPosition is null then '' else (case when TV.VolunteerPositionId>5 then AMVP.VolunteerPosition else '('+AMD.Abbreviation+') '+AMVP.VolunteerPosition end)end as AssignedPosition,
--case when AMVP.VolunteerPosition is null then '' else(case when AMD.Abbreviation is null then AMVP.VolunteerPosition else '('+AMD.Abbreviation+') '+AMVP.VolunteerPosition end)end as AssignedPosition,
case when TV.VolunteerPositionId is null then '' else convert(varchar(50),TV.VolunteerPositionId) end as AssignedVolunteerPositionId,
case when MT.DivisionId is null then '' else convert(varchar(50),MT.DivisionId) end as AssignedDivisionId,
(SELECT substring ( (SELECT '; ' + cast (b.PlayerName AS varchar(max))
FROM (SELECT DISTINCT ('('+MD.Abbreviation+') '+ PPI.PlayerLastName + ', '+PPI.PlayerFirstName+'$'+'001'+right(MUS.DetailIdURL_Structure + cast(convert(varchar(max),PPI.PlayerId) as varchar(max)),MUS.DetailIdURL_Length)) AS PlayerName
FROM dbo.Player_PermanentInfo PPI,dbo.Player_SeasonalInfo PSI,dbo.Master_Division MD
WHERE (PPI.ParentId1=UI.UserId or PPI.ParentId2=UI.UserId)
and PSI.PlayerId=PPI.PlayerId
and PSI.IsAvailable=1 and PSI.SeasonId=VSI.SeasonID
and PSI.DivisionId=MD.DivisionId
)b FOR XML PATH ( '' )),2,100000))AS PlayerName,
(SELECT substring((SELECT ','
+ cast (b.CheckTypeID AS varchar)
FROM (SELECT DISTINCT (VBI.CheckTypeID)
FROM dbo.Volunteer_BackgroundInfo VBI
WHERE VBI.VolunteerId = VSI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS BGCheckType,
(SELECT substring ((SELECT ','
+ cast (b.ColorName AS varchar)
FROM (SELECT DISTINCT (MCL.ColorName)
FROM dbo.Volunteer_BackgroundInfo VBI,dbo.Master_Color MCL
WHERE MCL.ColorID= VBI.ColorID
and VBI.VolunteerId = VI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS BGCheckResult,
(SELECT substring((SELECT ','
+ cast (b.DatePerformed AS varchar)
FROM (SELECT DISTINCT Convert(varchar,VBI.DatePerformed,101) as DatePerformed
FROM dbo.Volunteer_BackgroundInfo VBI
WHERE VBI.VolunteerId = VI.VolunteerId --VBGD.VolunteerSeasonalID = VSI.VolunteerSeasonalId
)
b FOR XML PATH ( '' )),2,100000))AS BGCheckDate,
VSI.VolunteerSeasonalStatusId as Approved,
case when VSI.VolunteerSeasonalStatusId = 1 then 'i_tick.gif' else 'remove_Icon.png' end as IsApproved ,
--,MS.SeasonName
'1' as DisplayId,
case when VSI.SeasonId = 8 then '2014/15 Regular Season' else
case when VSI.SeasonId = 7 then '2013/14 Regular Season' else '2014/15 FYBA Fall Academy'
end
end as SeasonName,
VSI.SchedulingPriority
--into #finalTable
FROM dbo.Master_Url_Setting MUS, dbo.Volunteer_Info VI
inner join dbo.Volunteer_SeasonalInfo VSI on VSI.VolunteerId = VI.VolunteerId
inner join User_Info UI on UI.UserId=VI.UserId
inner JOIN dbo.TeamVolunteers TV
ON TV.VolunteerSeasonalId= VSI.VolunteerSeasonalId
LEFT OUTER JOIN dbo.Master_UniformSize MUSZ
ON MUSZ.UniformSizeId = VI.ShirtSizeId
left OUTER JOIN dbo.PracticePreference PP
ON PP.VolunteerSeasonalId = VSI.VolunteerSeasonalId
--left OUTER JOIN dbo.TeamVolunteers TV
--ON TV.VolunteerSeasonalId= VSI.VolunteerSeasonalId
LEFT OUTER JOIN dbo.Master_Teams MT
ON MT.TeamId = TV.TeamId
left outer join dbo.Master_Division AMD
ON MT.DivisionId = AMD.DivisionId
left outer join dbo.Master_VolunteerPosition AMVP
ON AMVP.VolunteerPositionId = TV.VolunteerPositionId
WHERE VSI.IsAvailable = 1
AND VSI.LeagueId = #LeagueId
and VSI.Seasonid in (7,8,9)
--and VSI.VolunteerId=878
)b
--where VolunteerSeasonalId=7225
OPTION (FORCE ORDER);
IF #p_DataflowId IS NULL
BEGIN
SET #Statement = 'Select * from #finalTable ' + #p_SearchCriteria+' OPTION (FORCE ORDER)';
EXEC (#Statement);
END
ELSE
BEGIN
CREATE TABLE [#tempExportFields]([DataFieldName] varchar(max),Label varchar(max));
Set #Statement = 'Select '
insert into #tempExportFields exec sp_getControlsorderingForExport #p_DataflowId;
set #Statement = 'Select '+(select substring((select ', '+ b.Label from (Select DataFieldName +' as ' + '['+ Label +']' as Label from #tempExportFields) as b for xml path('')),2,100000)) + ' from #finalTable ' + #p_SearchCriteria;
--select (#Statement);
EXEC (#Statement);
DROP TABLE #tempExportFields;
END
DROP TABLE #finalTable;
SET NOCOUNT OFF;
end
else /* for single Record record*/
begin
SELECT distinct VSI.VolunteerSeasonalId,
VI.VolunteerId,
right(MUS.DetailIdURL_Structure + cast(convert(varchar(max),VI.VolunteerId) as varchar(max)),MUS.DetailIdURL_Length) as NewVolunteerId,
right(MUS.OtherURL_Structure + cast(convert(varchar(max),VSI.SeasonId) as varchar(max)),MUS.OtherURL_Length) as NewSeasonId,
UI.FirstName as VolunteerFirstName,
UI.LastName as VolunteerLastName,
UI.LastName+ ', '+ UI.FirstName as VolunteerName,
UI.Email as VolunteerEmail,
VI.ShirtSizeId,
MUSZ.Size as ShirtSize,
UI.HomePhone as VolunteerHomePhone,
UI.MobilePhone as VolunteerMobilePhone,
UI.WorkPhone as VolunteerWorkPhone,
--convert(varchar,UI.BirthDate,101) as VolunteerBirthDate,
--UI.Address,
--UI.StateId,
--MST.Abbreviation as State,
--UI.CityId,
--MC.Abbreviation as City,
--UI.Zip,
--VI.DrivingLicenceNumber,
--UI.Gender as VolunteerGender,
--VSI.CreatedBy,
--VSI.CreatedOn,
--VSI.UpdatedBy,
--VSI.UpdatedOn,
VSI.StatusId,
VSI.SeasonId,
(SELECT substring ( (SELECT ', ' + cast (b.[Day] as varchar)
FROM (select MD.[Day]
from dbo.Master_Day MD where MD.DayID in (select items from dbo.udf_Split(PP.DaysCanNotPractice, ',')))
b for xml path ('')),2,10000)) as DaysCanNotPractice,
(SELECT substring ( (SELECT ', ' + cast (b.[Time] as varchar)
FROM (select PT.[Time]
from dbo.PreferedTime PT where PT.PreferedTimeId in (select items from dbo.udf_Split(PP.TimeCanNotPractice, ',')))
b for xml path ('')),2,10000)) as TimeCanNotPractice,
--PP.LocationId,
--PP.LocationRankId,
(select substring((select ', ' + cast (b.ShortName as varchar)
from (select ML.ShortName
from dbo.Master_Location ML
where ML.LocationID in (select items from dbo.udf_Split(PP.LocationId, ',')))
as b for xml path('')),2,1000000)) as ShortName,
(SELECT MR.[Rank]
FROM dbo.Master_Rank MR
WHERE MR.RankID = PP.LocationRankId) as LocationRank,
--PP.DayOfWeekId,
--PP.DayOfWeekRankId,
(select substring((select ', ' + cast (b.[Day] as varchar)
from (select MD.[Day] from dbo.Master_Day MD
where MD.DayID in (select items from dbo.udf_Split(PP.DayOfWeekId,',')))
as b for xml path('')),2,1000000)) as [DayOfWeek],
(select MR.[Rank]
from dbo.Master_Rank MR
where MR.RankID = PP.DayOfWeekRankId)AS DayOfWeekRank,
--PP.TimeOfDayId,
--PP.TimeOfDayRankId,
(select substring((select ', ' + cast (b.[Time] as varchar)
from (select [Time]
from dbo.PreferedTime PT
where PT.PreferedTimeId in (select items from dbo.udf_Split(PP.TimeOfDayId,',')))
as b for xml path('')),2,1000000)) as TimeOfDay,
(SELECT MR.[Rank]
FROM dbo.Master_Rank MR
WHERE MR.RankID = PP.TimeOfDayRankId) as TimeOfDayRank,
(SELECT substring ( (SELECT ',' + cast (b.PositionId AS varchar)
FROM (SELECT DISTINCT (VRP1.PositionId)
FROM dbo.Volunteer_Requested_Position VRP1
WHERE VRP1.VolunteerSeasonalId = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS VolunteeredPositionId,
(SELECT substring ( (SELECT ';' + cast (b.VolunteerPosition AS varchar)
FROM (SELECT DISTINCT (case when VRP1.PositionId>5 then MVP.VolunteerPosition else '('+MD.Abbreviation+') '+MVP.VolunteerPosition end)as VolunteerPosition
FROM dbo.Master_VolunteerPosition MVP,dbo.Volunteer_Requested_Position VRP1
left outer join dbo.Master_Division MD ON VRP1.DivisionId = MD.DivisionId
WHERE MVP.VolunteerPositionId = VRP1.PositionId
AND VRP1.VolunteerSeasonalId = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS VolunteeredPosition,
/*(SELECT substring ( (SELECT ';' + cast (b.VolunteerPosition AS varchar)
FROM (SELECT DISTINCT (case when MD.Abbreviation is null then MVP.VolunteerPosition else '('+MD.Abbreviation+') '+MVP.VolunteerPosition end)as VolunteerPosition
FROM dbo.Master_VolunteerPosition MVP,dbo.Volunteer_Requested_Position VRP1
left outer join dbo.Master_Division MD ON VRP1.DivisionId = MD.DivisionId
WHERE MVP.VolunteerPositionId = VRP1.PositionId
AND VRP1.VolunteerSeasonalId = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS VolunteeredPosition,*/
(SELECT substring ( (SELECT ',' + cast (b.DivisionId AS varchar)
FROM (SELECT DISTINCT (VRP1.DivisionId)
FROM dbo.Volunteer_Requested_Position VRP1
WHERE VRP1.VolunteerSeasonalId = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS VolunteeredDivisionId,
/*(SELECT substring ( (SELECT ', ' + cast (b.Abbreviation AS varchar)
FROM (SELECT DISTINCT (MD.Abbreviation)
FROM dbo.Volunteer_Requested_Position VRP1,dbo.Master_Division MD
WHERE VRP1.VolunteerSeasonalId = VSI.VolunteerSeasonalId
and VRP1.DivisionId=MD.DivisionId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS Abbreviation,*/ /*VolunteeredDivision*/
(SELECT substring ( (SELECT ',' + cast (b.VolunteerPositionId AS varchar)
FROM (SELECT DISTINCT (TV.VolunteerPositionId)
FROM dbo.TeamVolunteers TV
WHERE TV.VolunteerSeasonalId = VSI.VolunteerSeasonalId
)
b
FOR XML PATH ( '' )),
2,
100000
))
AS AssignedVolunteerPositionId,
(SELECT substring ( (SELECT ';' + cast (b.VolunteerPosition AS varchar)
......TRUNCATED

Added a few lines of code and now query is taking 5x as long to run. Executions plans are almost identical

I have a query that has been in production a long time and takes an average of 4 seconds to run. I added the code below which is a declaration of a table and then an insert into that table. then the select query joins to that and returns 1 field from it in the select statement. Now the query takes up to 25 seconds to run.
DECLARE #tmpStageLoc TABLE
(
LP VARCHAR(20) ,
stgloc VARCHAR(20)
)
INSERT INTO #tmpStageLoc
EXEC dbo.spGetStageLoc #ActLP = #LP;
--Try to get data from DW tables first.
INSERT INTO [COMMON_INFORMATION].[dbo].[ProcTmpData]
( SPID ,
DataSetName ,
IntValue1 , --JRB004
ChValue1 , --JRB001
String1 ,
InsDate
)
SELECT DISTINCT
##SPID ,
#datasetname ,
ls.ToDC ,
col.Cust_No --JRB001
,
REPLACE(#LOADNUM, ' ', '') + --JRB007
'~' + 'N/A'
+ --JRB005 Wave number no longer printed on label
'~' + CASE WHEN la.stage_loc IS NULL THEN ''
ELSE la.stage_loc + '-' + ISNULL(la.misc_info,
'')
END + '~' + fa.OrderControlNo + '~' + col.Cust_No
+ '~' + SUBSTRING(cst.name, 1, 20) + '~'
+ SUBSTRING(cst.name, 21, 5) + '~' + LEFT(cst.address1
+ ', '
+ CASE
WHEN cst.address2 IS NULL
THEN ''
ELSE ( cst.address2
+ ', ' )
END + cst.city
+ ', '
+ cst.state, 45)
+ '~' + ls.StopNO + '~' + ls.LoadNo + '~' + e.first_name
+ ' ' + e.last_name + --JRB009
'~' + --JRB009
CASE WHEN cst.plt_usage IS NULL --JRB009
THEN '' --JRB009
ELSE --JRB009
'# ' + LEFT(cst.plt_usage, 20) --JRB009
END + '~' + ISNULL(STG.STGLOC, '') + '~' --JRB009
,
#RUNDTE
FROM dbo.tblFactAction AS fa
LEFT OUTER JOIN COMMON_INFORMATION.dbo.LoadStop AS ls ON LEFT(fa.OrderControlNo,
8) = ls.ExtOrderNo
AND ls.LatestLoadFlg = 1 --JRB008
LEFT OUTER JOIN dbo.RP_LaneAssign AS la ON ls.LoadNo = la.carrier_move_id
OR ls.ExtOrderNo = la.order_num
LEFT OUTER JOIN dbo.Cust_Order_Lookup AS col ON fa.OrderControlNo = col.Order_Control_no
LEFT OUTER JOIN COMMON_INFORMATION.dbo.Partners AS cst ON col.Cust_No = cst.partner_shipto
LEFT OUTER JOIN COMMON_INFORMATION.dbo.Employee AS e ON fa.EmployeeID = CAST(e.emp_no AS VARCHAR(40))
LEFT OUTER JOIN #tmpStageLoc STG ON fa.actlp = STG.LP
WHERE fa.ActLP = #LOADNUM
AND fa.AssignTypeID IN ( 'PB01', 'PF01' )
I have looked at the execution plans in SQL Sentry Plan Explorer and they look almost identical. I am using the free version of the software. I am at a loss at why the query takes so long to run. just an FYI when I execute the stored procedure that is being called it runs instantly.
Any ideas on how I can figure out why the query now runs for so long?

Query to find out if foreign key is referenced anywhere else in the database

I have table Animal.
I want to return everything from this table + one column which denotes if record is referenced anywhere else as a foreign key.
I.E.:
Animal_Id Name
1 Cat
2 Dog
3 Parrot
I want to return this:
AnimalId Name Referenced
1 Cat true
2 Dog false
3 Parrot true
by 'referenced' I mean if a specific Animal_Id was referenced in any other table in the database as a foreign key. I think I first can query information_schema and find out what tables contain this foreign key and then use loop and dynamic sql to execute
select count(*) from eachTable where AnimalID = 1
Does anyone have a snippet on how to do that?
This should do it:
SELECT OO.Animal_ID, OO.Name, CASE WHEN XX.REFERENCED IS NULL THEN 'false' ELSE 'true' END Referenced
FROM Animal OO
OUTER APPLY (SELECT SUM(1) REFERENCED
FROM (SELECT FkAnimal_ID FROM AnimalRef1 RR WHERE RR.FkAnimal_ID = OO.Animal_ID UNION ALL
SELECT FkAnimal_ID FROM AnimalRef2 RR WHERE RR.FkAnimal_ID = OO.Animal_ID UNION ALL
SELECT FkAnimal_ID FROM AnimalRef3 RR WHERE RR.FkAnimal_ID = OO.Animal_ID) II) XX
If you don't know all the FK tables, you can use system meta-data tables to generate that collection of UNION ALL queries into a table, which you could then copy & paste into your query:
WITH AKT AS ( SELECT f.name AS ForeignKey
,OBJECT_NAME(f.parent_object_id) AS TableName
,COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName
,OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName
,COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
WHERE f.referenced_object_id = object_id('Animal'))
SELECT 'SELECT ' + ColumnName + ' FROM ' + TableName + ' WHERE RR.' + ColumnName + ' = OO.' + ReferenceColumnName + ' UNION ALL'
FROM AKT
And for the whole thing in a single query using a recursive CTE:
DECLARE #QUERY NVARCHAR(MAX)
WITH AKT AS ( SELECT ROW_NUMBER() OVER (ORDER BY f.name) RN, f.name AS ForeignKey
,OBJECT_NAME(f.parent_object_id) AS TableName
,COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName
,SCHEMA_NAME(oo.schema_id) SchemaName
,OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName
,COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN sys.objects oo ON oo.object_id = fc.referenced_object_id
WHERE f.referenced_object_id = object_id('Animal'))
,bs AS (SELECT AKT.RN
,'SELECT ' + ColumnName + ' FROM ' + SchemaName + '.' + TableName + ' WHERE ' + ColumnName + ' = OO.' + ReferenceColumnName SubQuery
FROM AKT)
,re AS (SELECT bs.RN, CAST(RTRIM(bs.SubQuery) AS VARCHAR(MAX)) Joined
FROM bs
WHERE bs.RN = 1
UNION ALL
SELECT bs2.RN, CAST(re.Joined + ' UNION ALL ' + ISNULL(RTRIM(bs2.SubQuery), '') AS VARCHAR(MAX)) Joined
FROM re, bs bs2
WHERE re.RN = bs2.RN - 1 )
,fi AS (SELECT ROW_NUMBER() OVER (ORDER BY RN DESC) RNK, Joined
FROM re)
SELECT #QUERY = 'SELECT OO.Animal_ID, OO.Name, CASE WHEN XX.REFERENCED IS NULL THEN ''No'' ELSE ''Yes'' END Referenced
FROM Animal OO
OUTER APPLY (SELECT SUM(1) REFERENCED
FROM (' + Joined + ') II) XX'
FROM fi
WHERE RNK = 1
EXEC (#QUERY)