Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从存储过程中的列运行SQL查询_Sql_Sql Server_Sql Server 2008_Stored Procedures - Fatal编程技术网

从存储过程中的列运行SQL查询

从存储过程中的列运行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

我有一个表,其中有一列包含要获取计数的查询。我正在编写一个存储过程来从这个表中获取记录。我需要做的是在count列中执行查询,并在同一列中返回值。下面是带有count列的示例表

因此,当我运行存储过程时,我应该得到如下结果:

因此,如果有任何方法可以在sql server 2008中实现这一点,请您建议我。

我同意。我不明白为什么要将查询存储在表中

使用/创建适当的SP来代替此操作:

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我现在确实意识到设计很糟糕:)只是想尝试一下。感谢您提供判断电话的解决方案。