从存储过程中的列运行SQL查询
我有一个表,其中有一列包含要获取计数的查询。我正在编写一个存储过程来从这个表中获取记录。我需要做的是在count列中执行查询,并在同一列中返回值。下面是带有count列的示例表 因此,当我运行存储过程时,我应该得到如下结果: 因此,如果有任何方法可以在sql server 2008中实现这一点,请您建议我。我同意。我不明白为什么要将查询存储在表中 使用/创建适当的SP来代替此操作:从存储过程中的列运行SQL查询,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我有一个表,其中有一列包含要获取计数的查询。我正在编写一个存储过程来从这个表中获取记录。我需要做的是在count列中执行查询,并在同一列中返回值。下面是带有count列的示例表 因此,当我运行存储过程时,我应该得到如下结果: 因此,如果有任何方法可以在sql server 2008中实现这一点,请您建议我。我同意。我不明白为什么要将查询存储在表中 使用/创建适当的SP来代替此操作: CREATE PROCEDURE GetUserCount @userId INT AS BEGIN
CREATE PROCEDURE GetUserCount
@userId INT
AS
BEGIN
SET NOCOUNT ON;
SELECT COUNT(*) AS UserCount
FROM TableName
WHERE UserId = @userId
END
有关更多信息,请参阅:
如果要为每个用户提取数据,请使用如下查询:
SELECT UserId, COUNT(*)
FROM TableName
GROUP BY UserId
就这些
欲了解更多信息,请参阅:尽管这种设计很糟糕,但以下是您可以完成所需任务的方法:
CREATE TABLE Users(ID int)
GO
CREATE TABLE Test(ID INT, Name NVARCHAR(20), Count NVARCHAR(200))
GO
INSERT INTO Users
VALUES ( 1 ),
( 1 ),
( 2 ),
( 3 )
INSERT INTO Test
VALUES ( 1, 'A', 'Select Count(*) From Users where ID = 1' ),
( 2, 'B', NULL ),
( 3, 'C', 'Select Count(*) From Users where ID = 3' ),
( 4, 'D', 'Select Count(*) From Users where ID = 1' )
DECLARE @Results TABLE
(
ID INT ,
Name NVARCHAR(20) ,
Count INT
)
DECLARE @R TABLE ( ID INT )
DECLARE @ID INT ,
@Name NVARCHAR(20) ,
@Statement NVARCHAR(200) ,
@Count INT
DECLARE cur CURSOR FAST_FORWARD READ_ONLY
FOR
SELECT ID , Name , Count FROM Test
OPEN cur
FETCH NEXT FROM cur INTO @ID, @Name, @Statement
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM @R
INSERT INTO @R
EXEC ( @Statement )
INSERT INTO @Results
VALUES ( @ID, @Name, ( SELECT * FROM @R ) )
FETCH NEXT FROM cur INTO @ID, @Name, @Statement
END
CLOSE cur
DEALLOCATE cur
SELECT * FROM @Results
输出:
ID Name Count
1 A 2
2 B NULL
3 C 1
4 D 2
我不明白。在表的列中有查询以获取计数?这对我来说没有意义。这是一张样品表。。在我的实际项目中,count列与基于表的不同查询相似。我需要知道是否有可能执行这些查询并获得我需要的结果。当然,必须有更好的设计。您看过存储过程或用户定义函数吗?将查询存储为表值并不是很好的做法。您可以通过将数据加载到临时表中来实现这一点。表,然后使用cursor+sp_execute_sql,但这种设计非常糟糕……看看计算列,看看这是否有帮助。否则,视图也可能对您有所帮助。为什么要强制打开门?你看到我的答案了吗?@MaciejLos,你的答案没有回答OP的问题
我需要做的是执行count列中的查询…如果有任何方法可以实现这一点…
。除此之外,您正在创建存储过程以选择计数,但您可以在OUTER APPLY
中选择该信息。。不需要存储的proc不回答吗?Op希望获得用户数。。。另一方面:我看不出调用多个查询的理由,即使是在性能方面。@MaciejLos,OP不需要用户计数(这是一个示例表。.在我的实际项目中,计数列与基于表的不同查询类似。
)。他想执行查询。此外,您还讨论了性能,但使用存储过程实现了解决方案。您能否编写从表中选择的查询,并使用您的解决方案获得所需的数据?在您的解决方案中,至少标量值函数会更好(更不用说外部应用)@GiorgiNakeuri我现在确实意识到设计很糟糕:)只是想尝试一下。感谢您提供判断电话的解决方案。