存储过程中的动态 SQL 不返回结果集;在 SSMS 中运行时,我得到了结果

Posted

技术标签:

【中文标题】存储过程中的动态 SQL 不返回结果集;在 SSMS 中运行时,我得到了结果【英文标题】:Dynamic SQL in stored procedure doesn't return result set; when run in SSMS I get results 【发布时间】:2013-04-12 19:00:25 【问题描述】:

我有一个构建动态 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。

【问题讨论】:

您需要从#tmpAffPeople 表中选择行以从存储过程中获取结果集 哦,为了皮特的爱!谢谢超人!如果您将此作为答案发布,我会投票。星期五一定很晚了,我刚找到我的d'oh!一周。 这发生在我们最好的人身上 =) 【参考方案1】:

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

【讨论】:

以上是关于存储过程中的动态 SQL 不返回结果集;在 SSMS 中运行时,我得到了结果的主要内容,如果未能解决你的问题,请参考以下文章

sql动态查询返回值的意义是啥呢?

oracle存储过程 中把临时表数据 返回结果集

sqlserver 存储过程 返回结果集的 例子

如何将单个结果集从返回多个集的 SQL 存储过程保存到临时表?

SQL Server存储过程同时返回分页结果集和总数

ssm mapper.xml讲解