0

我有一个构建动态 sql 并执行它的存储过程。它不给出错误消息,但不返回结果。但是,当我手动运行 sp 中的代码时,我得到了我正在寻找的结果。为什么会这样?sp 采用一个 nvarchar(max) 参数,@CLM。ANSI_NULLS、QUOTED_IDENTIFIER 和 NOCOUNT 为 ON。在 sp 中有一个临时表#tmpAffPeople。它的列是 EmpLogin nvarchar(8)、Matter nvarchar(15)、NameandTitle nvarchar(max)、TotalHours decimal(6,2)、ClientMatter varchar(max)。sp的正文如下:

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'

运行后,在 sp 中,我通过在括号之间紧跟 @SQLString 调用执行来执行 @SQLString。然后我放下桌子。我以前做过这种事情,从来没有遇到过问题。我错过了什么?我正在使用 SQL Server 2008R2。

4

1 回答 1

1

您需要从#tmpAffPeople表中选择行以从存储过程中获取结果集

于 2013-04-12T19:11:21.890 回答