У меня есть хранимая процедура, которая строит динамический sql и выполняет его. Он не дает сообщений об ошибках, но не возвращает результаты. Однако, когда я запускаю код в sp вручную, я получаю результаты, которые я ищу. Почему это должно быть? Sp принимает один параметр nvarchar (max), @CLM. ANSI_NULLS, QUOTED_IDENTIFIER и NOCOUNT включены. В sp есть одна временная таблица #tmpAffPeople. Его столбцы - EmpLogin nvarchar (8), Matter nvarchar (15), NameandTitle nvarchar (max), TotalHours decimal (6,2), ClientMatter varchar (max). Текст зр выглядит следующим образом:Динамический SQL в хранимой процедуре не возвращает результат; при запуске в SSMS я получаю результаты
DECLARE @SQLString AS nvarchar(max)
SET @SQLString = ';WITH Emps (EmpLogin, AttorneyAndTitle)
AS
(SELECT EmpLogin,
CASE WHEN EmpTermDate IS NULL OR EmpTermDate = ' + '''' + '''' + ' THEN LastName + ' + '''' + ', ' + '''' + ' + FirstName + ' + ''''+ ' [' + '''' + ' + Title + ' + '''' + '] ' + '''' +
'ELSE LastName + ' + '''' + ', ' + '''' + ' + FirstName + ' + '''' + ' [' + '''' + ' + Title +' + '''' +'] (inactive) ' + '''' + ' END as FullName
FROM [LitigationHold].[dbo].[Employees]
where JobCode IN (' + '''' + '100' + '''' + ',' + '''' + '300' + '''' + ',' + '''' + '400' + '''' + ',' + '''' + '500' + '''' + ',' + '''' + '700' + '''' + ',' + '''' + '800' + '''' + ',' + '''' + '1801' + '''' + '))
INSERT INTO #tmpAffPeople
SELECT t.[EmpLogin],t.Matter, e.AttorneyAndTitle, SUM([Workhours]) AS TotalHours,
c.ClientName + ' + '''' + '/' + '''' + ' + em.MatterDesc
FROM TimeCard t
INNER JOIN Emps e
ON e.EmpLogin = t.EmpLogin
INNER JOIN EliteMatter em
ON t.Matter = em.MatterName
INNER JOIN EliteClient c
ON c.ClientNum = em.ClientNum
WHERE t.Matter IN (' + @CLM + ')
GROUP BY t.EmpLogin, c.ClientName, em.MatterDesc, t.Matter, e.AttorneyAndTitle
ORDER BY TotalHours'
После этого работает в зр я исполняю @SQLString по телефону выполнить с @SQLString сразу после него в скобках. Затем я бросаю стол. Раньше я делал такие вещи и никогда не испытывал проблем. Что мне не хватает? Я использую SQL Server 2008R2.
Вам необходимо выбрать строки из вашего #tmpAffPeople таблицы, чтобы получить результирующий набор из хранимой процедуры – supergrady
Oh , за любовь к Питу! Спасибо, суперграждане! Если вы опубликуете это как ответ, я продолжу. Это должно быть поздно в пятницу, я только что нашел свое д'о! за неделю. – Melanie
Это случается с лучшими из нас =) – supergrady