【发布时间】:2012-12-05 17:22:04
【问题描述】:
我有一个表,其中包含一个名为 WhereClause 的列
DECLARE @UserGroups TABLE (WhereClause nvarchar(1000), totalCount int)
该表已填充了一些 WhereClause 的值,但没有填充 totalCount 列的值。
WhereClause 的一个例子是“FirstName is null”。
基本上对于表中的每一行,我需要从另一个表(用户)计算 COUNT(*) 并在上表中设置totalCount。
以下不起作用:
SELECT UG.WhereClause, U.TotalCount
FROM @UserGroups as UG
OUTER APPLY (SELECT COUNT(*) as 'TotalCount' FROM [Users] WHERE UG.WhereClause)
) U
我尝试创建一个 sql 函数并在该函数中调用 exec sp_executesql 但它不受支持。
CREATE FUNCTION [dbo].[fn_UserGroupCount]
(
@whereClause as NVARCHAR(1000)
)
RETURNS @returnValue TABLE (TotalCount INT)
AS
BEGIN
DECLARE @stmt nvarchar(1500)
SET @stmt = 'SELECT COUNT(*) FROM [dbo].[Users]
WHERE ' + @whereClause
Exec sp_executesql @stmt
RETURN
END
SELECT * FROM [dbo].[fn_UserGroupCount]('Subject is null')
如前所述,如何填充我的@UserGroups 表?
谢谢
【问题讨论】:
-
确实这个想法看起来不错,但是这种方法会增加处理过载,因为必须为每一行执行 D-SQL。您能找到满足您要求的其他替代方案吗?
标签: sql-server tsql function dynamic-sql sp-executesql