2015-03-02 3 views
0

У меня есть таблица со столбцом, содержащим запросы для получения счета. Я пишу хранимую процедуру для извлечения записей из этой таблицы. Что мне нужно сделать, так это выполнить запросы в столбце count и вернуть значение в том же столбце. Ниже приведен пример таблицы со столбцом count.Выполнение SQL-запроса из столбца в хранимой процедуре

Так что, когда я запустить хранимую процедуру, я должен получить результат, как этот:

enter image description here

Так, пожалуйста, вы можете предложить мне, если есть какой-либо способ осуществить это в sql server 2008.

+1

Не понимаю. У вас есть запросы внутри столбца таблицы, чтобы получить счет? Это не имеет смысла для меня. –

+0

Tsss. Плохой дизайн. –

+0

Это пример таблицы. В моем реальном проекте столбец графа похож на разные запросы, основанные на таблице. Мне нужно знать, можно ли выполнить эти запросы и получить результат по мере необходимости. – Harsh

ответ

0

Несмотря на то, что эта конструкция ужасно, вот так, как вы можете делать то, что вам нужно:

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 
+0

Зачем сильно открывать двери? Вы видели мой ответ? –

+0

@MaciejLos, ваш ответ не отвечает на вопрос OP: «Мне нужно сделать, это выполнить запросы в столбце count .... если есть способ реализовать это ...». Кроме того, вы создаете хранимую процедуру для выбора счетчиков, но вы можете выбрать эту информацию в «OUTER APPLY», например .. Нет необходимости в сохраненной процедуре –

+0

Не отвечает? Op хочет получить количество пользователей ... С другой стороны: я не вижу причин для вызова нескольких запросов, даже в аспекте производительности. –

0

Я согласен с Sorrel Vesper. Я не понимаю, почему вы хотите хранить запрос в таблице.

Вместо этого использовать/создать правильную SP:

CREATE PROCEDURE GetUserCount 
    @userId INT 
AS 
BEGIN 

    SET NOCOUNT ON; 
    SELECT COUNT(*) AS UserCount 
    FROM TableName 
    WHERE UserId = @userId 

END 

Для получения дополнительной информации, пожалуйста, см: CREATE PROCEDURE

В случае, если вы хотите получить данные для каждого отдельного пользователя, используйте запрос, как это:

SELECT UserId, COUNT(*) 
FROM TableName 
GROUP BY UserId 

Вот и все!

Для получения дополнительной информации, пожалуйста, см: Aggregate functions

Смежные вопросы