Dinamik sorgudan saklı yordamın oluşturulması imkansız olduğunu bir yerde okudum."@query" dinamik tsql skaler değişkenini saklı yordamına bildirmelisiniz
Skaler değişken bildirmediğimde bazı hatalar var. Ben saklı yordam veya Görünüm (belki varlık çerçevesi 6 uygulamak sonradan kolaydır aracılığıyla istediğiniz
DECLARE
@cols AS NVARCHAR(MAX),
@selcols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@startdate datetime,
@enddate datetime,
@paramdef nvarchar(max)
SET @startdate = '2013-02-01'
SET @enddate = '2013-05-10';
SET @paramdef = '@startdate datetime, @enddate datetime';
SELECT
@selcols = STUFF((SELECT ','+'ISNULL(' + QUOTENAME(convert(varchar(10), [Date], 120)) + ', 0) AS ' + QUOTENAME(convert(varchar(10), [Date], 120))
FROM AdeccoView
--where datein > @startdate
-- and datein <= @enddate
GROUP BY [Date]
ORDER BY [Date]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SELECT
@cols = STUFF((SELECT ',' + QUOTENAME(convert(varchar(10), [Date], 120))
FROM AdeccoView
--where datein > @startdate
-- and datein <= @enddate
GROUP BY [Date]
ORDER BY [Date]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = N'SELECT CreatedBy,Name, Surname,EventTypeID,Event, '+ @selcols + ',Total
from
(
select av.EventTypeID,av.CreatedBy,emp.Name,emp.Surname,Event,
convert(varchar(10), [Date], 120) [Date],
row_number() over(PARTITION BY [date],av.EventTypeID,av.CreatedBy order BY av.EventTypeID,av.CreatedBy) m,
count(*) over(partition by av.CreatedBy,av.EventTypeId) Total
from AdeccoView av
left join EventType et on et.EventTypeID = av.EventTypeID
left join Employee emp on av.CreatedBy = emp.EmployeeD
) x
pivot
(
max(m)
for [Date] in ('[email protected]+')
) p '
exec sp_executesql @query, @paramdef, @startdate = @startdate, @enddate [email protected];
Ve şimdi,
:
İşte çalışıyor benim TSQL dinamik rapordur asp.net).
CREATE PROCEDURE GetEmployees
(@startDateInput datetime = NULL, @endDateInput datetime = NULL)
AS
SET NOCOUNT ON;
DECLARE
@cols AS NVARCHAR(MAX),
@selcols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@startdate datetime,
@enddate datetime,
@paramdef nvarchar(max)
SET @startdate = @startDateInput
SET @enddate = @endDateInput
SET @paramdef = '@startdate datetime, @enddate datetime';
SELECT
@selcols = STUFF((SELECT ','+'ISNULL(' + QUOTENAME(convert(varchar(10), [Date], 120)) + ', 0) AS ' + QUOTENAME(convert(varchar(10), [Date], 120))
FROM AdeccoView
--where datein > @startdate
-- and datein <= @enddate
GROUP BY [Date]
ORDER BY [Date]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SELECT
@cols = STUFF((SELECT ',' + QUOTENAME(convert(varchar(10), [Date], 120))
FROM AdeccoView
--where datein > @startdate
-- and datein <= @enddate
GROUP BY [Date]
ORDER BY [Date]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = N'SELECT CreatedBy,Name, Surname,EventTypeID,Event, '+ @selcols + ',Total
from
(
select av.EventTypeID,av.CreatedBy,emp.Name,emp.Surname,Event,
convert(varchar(10), [Date], 120) [Date],
row_number() over(PARTITION BY [date],av.EventTypeID,av.CreatedBy order BY av.EventTypeID,av.CreatedBy) m,
count(*) over(partition by av.CreatedBy,av.EventTypeId) Total
from AdeccoView av
left join EventType et on et.EventTypeID = av.EventTypeID
left join Employee emp on av.CreatedBy = emp.EmployeeD
) x
pivot
(
max(m)
for [Date] in ('[email protected]+')
) p '
GO
exec sp_executesql @query, @paramdef, @startdate = @startDateInput, @enddate [email protected];
DÜZENLEME: İşte
sp_executesql
bitirir BEGIN ve END ile benim güncellenen kod kaldırıldı GİT deyimi
CREATE PROCEDURE GetEmployees
(@startDateInput datetime = NULL, @endDateInput datetime = NULL)
AS
SET NOCOUNT ON;
BEGIN
DECLARE
@cols AS NVARCHAR(MAX),
@selcols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@startdate datetime,
@enddate datetime,
@paramdef nvarchar(max)
SET @startdate = @startDateInput
SET @enddate = @endDateInput
SET @paramdef = '@startdate datetime, @enddate datetime';
SELECT
@selcols = STUFF((SELECT ','+'ISNULL(' + QUOTENAME(convert(varchar(10), [Date], 120)) + ', 0) AS ' + QUOTENAME(convert(varchar(10), [Date], 120))
FROM AdeccoView
--where datein > @startdate
-- and datein <= @enddate
GROUP BY [Date]
ORDER BY [Date]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SELECT
@cols = STUFF((SELECT ',' + QUOTENAME(convert(varchar(10), [Date], 120))
FROM AdeccoView
--where datein > @startdate
-- and datein <= @enddate
GROUP BY [Date]
ORDER BY [Date]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = N'SELECT CreatedBy,Name, Surname,EventTypeID,Event, '+ @selcols + ',Total
from
(
select av.EventTypeID,av.CreatedBy,emp.Name,emp.Surname,Event,
convert(varchar(10), [Date], 120) [Date],
row_number() over(PARTITION BY [date],av.EventTypeID,av.CreatedBy order BY av.EventTypeID,av.CreatedBy) m,
count(*) over(partition by av.CreatedBy,av.EventTypeId) Total
from AdeccoView av
left join EventType et on et.EventTypeID = av.EventTypeID
left join Employee emp on av.CreatedBy = emp.EmployeeD
) x
pivot
(
max(m)
for [Date] in ('[email protected]+')
) p '
END
exec sp_executesql @query, @paramdef, @startdate = @startDateInput, @enddate [email protected];
Lütfen eklenmiş kodum ekte bulabilirsiniz. Şimdi iyi olduğunu mu düşünüyorsun? Depolanan prosedür başarıyla tamamlandı. Cevabın çözüm olduğunu düşünüyorum. Teşekkürler! – Stefan0309
@ Stefan0309. . . Kodunuz oldukça makul görünüyor (bence vücudun girintili olmasına rağmen). –