Не удается связать часть WHERE в запросе SQL - PullRequest
1 голос
/ 29 июня 2011

Когда вы пытаетесь создать этот процесс на MS SQL Server 2008 и пытаетесь связать отчет (отчеты Crystal или SQL Server), вы не можете получить какой-либо параметр из отчета. Я не получаю никаких ошибок. Я просто вижу имя процесса и нет столбца под ним, чтобы получить какие-либо данные из него. Пожалуйста, помогите

create proc getdata 
@where as nvarchar (max)
as
declare @sql as varchar(max)
set @sql='select cp.address,
(case when cp.male =1 then ''Male'' 
      when cp.female =1 then ''Female'' 
      else null end ) AS "Gender" 
from consumer_premium cp where '+ @where
exec(@sql);

@ где пример выполнения

getdata 'male=1'

Вот таблица

CREATE TABLE [dbo].[Consumer_Premium](
    [Address] [nvarchar](255) NULL,
    [Male] [bit] NULL,
    [Female] [bit] NULL)

пожалуйста, помогите.

1 Ответ

1 голос
/ 29 июня 2011

Вот один из возможных вариантов, который вы можете попробовать, если используете SSRS 2008.Следующий пример был создан с использованием SSRS 2008 на основе данных, предоставленных в вопросе.

  1. Создайте таблицу с именем dbo.Consumer_Premium и хранимую процедуру с именем dbo.GetData, используя сценарии, предоставленные в разделе «Сценарии SQL»,Заполните таблицу данными, как показано на скриншоте # 1 .

  2. Создайте отчет SSRS с именем BindWhere.rdl, как показано на скриншоте # 2 .

  3. Создайте параметр отчета с именем Gender с настройками, как показано на скриншотах # 3 - # 5 .

  4. Настройка источника данных отчета, как показано на скриншотах # 6 - # 8 .

  5. Снимок экрана # 9 показывает выполнение отчета по умолчанию с параметром Gender, установленным на значение Мужской .

  6. Снимок экрана # 10 показывает выполнение отчета по умолчаниюкогда значение параметра Gender изменяется на Female .Чтобы обновить данные, нажмите кнопку «Просмотреть отчет».

Надеюсь, это поможет.

Сценарии SQL:

CREATE TABLE [dbo].[Consumer_Premium](
    [Address] [nvarchar](255) NULL,
    [Male] [bit] NULL,
    [Female] [bit] NULL
) ON [PRIMARY]
GO

CREATE PROCEDURE getdata 
(
    @where AS NVARCHAR(MAX)
)   
AS
    DECLARE @sql AS VARCHAR(MAX)
    SET @sql='select cp.address,
    (case when cp.male =1 then ''Male'' 
          when cp.female =1 then ''Female'' 
          else null end ) AS "Gender" 
    from consumer_premium cp where '+ @where
    EXEC(@sql);
GO

Снимок экрана № 1:

1

Снимок экрана № 2:

2

Снимок экрана № 3:

3

Снимок экрана № 4:

4

Снимок экрана № 5:

5

Снимок экрана № 6:

6

Снимок экрана № 7:

7

Снимок экрана № 8:

8

Снимок экрана № 9:

9

Снимок экрана № 10:

10

...