Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Tsql 创建SQL语句以同时使用SSM和SSR_Tsql_Reporting Services_Sql Server 2000_Ssrs 2008 - Fatal编程技术网

Tsql 创建SQL语句以同时使用SSM和SSR

Tsql 创建SQL语句以同时使用SSM和SSR,tsql,reporting-services,sql-server-2000,ssrs-2008,Tsql,Reporting Services,Sql Server 2000,Ssrs 2008,我需要把这个问题安排一下。假设您已经创建了一个名为ParameterTesting的数据库,并创建了一个表,并按如下方式填充它: IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'StarWars' AND TABLE_SCHEMA = 'dbo') BEGIN DROP TABLE dbo.StarWars PRINT 'Droppe

我需要把这个问题安排一下。假设您已经创建了一个名为ParameterTesting的数据库,并创建了一个表,并按如下方式填充它:

IF EXISTS
     (SELECT 1
      FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_NAME = 'StarWars'
      AND   TABLE_SCHEMA = 'dbo')
  BEGIN
    DROP TABLE dbo.StarWars
    PRINT 'Dropped StarWars'
  END



SET  ANSI_NULLS ON;
GO
SET  QUOTED_IDENTIFIER ON;
GO

CREATE TABLE [dbo].[StarWars]
(
  [IdentityColumn]     INT IDENTITY (1, 1) NOT NULL
 ,[MasterDate]         DATETIME NULL
 ,[ForcePowerRating]   INT NULL
 ,[Name]               VARCHAR(25) NULL
 ,[Status]             VARCHAR(25) NULL
)
ON [PRIMARY];
GO


INSERT INTO StarWars(
              MasterDate
             ,ForcePowerRating
             ,[Name]
             ,[Status])
VALUES (
         '5/21/1980'
        ,500
        ,'Luke Skywalker'
        ,'Master')

INSERT INTO StarWars(
              MasterDate
             ,ForcePowerRating
             ,[Name]
             ,[STATUS])
VALUES (
         '1/1/1910'
        ,1000
        ,'Yoda'
        ,'Jedi Council')

INSERT INTO StarWars(
              MasterDate
             ,ForcePowerRating
             ,[Name]
             ,[STATUS])
VALUES (
         '1/1/1930'
        ,NULL
        ,'Obi-Wan Kenobi'
        ,'Master')

INSERT INTO StarWars(
              MasterDate
             ,ForcePowerRating
             ,[Name]
             ,[STATUS])
VALUES (
         '1/1/1920'
        ,300
        ,NULL
        ,NULL)

INSERT INTO StarWars(
              MasterDate
             ,ForcePowerRating
             ,[Name]
             ,[STATUS])
VALUES (
         NULL
        ,450
        ,'Anakin Skywalker'
        ,'Sith Apprentice')
在本例中,我试图为Status创建一个多值参数,但这很棘手,因为Status列可以为null。如果我不必担心空值,我可以简单地从同一个查询中设置可用值和默认值,参数将变为可选

在我看来,在SSMS或类似工具中构造该查询的正确方法是:

DECLARE @Status AS VARCHAR(20)
SET @status = 'Master'

SELECT [Name]
      ,ForcePowerRating
      ,MasterDate
      ,Status
FROM StarWars
WHERE 
(status in (@Status) or (status is null and   '..None' in (@Status)))
我将为可用值和默认值填充数据集,以:

select distinct coalesce(status, '..None') JediStatus from StarWars
我使用IN语句,因此它可以支持多个值。我的参数数据集查询将“…None”替换为Null,并且此语句的WHERE子句处理Null值。如果不这样做,您的参数将不会默认为SSRS中的整个列表,因为多值参数不能支持SSRS中的空值

本质上,我的问题是这个在SSMS或其他工具中使用t-sql变量时,如何使用我的查询填充它?

我希望能够在SSMS中运行查询(包括参数列表查询)以检查我的工作。而不是:

Set @Status = ‘Master’
我想做一些类似的事情:

Set @Status = select distinct coalesce(status, '..None') JediStatus from StarWars
这是行不通的,使用表变量也行不通,因为不能将IN与表变量一起使用。我研究了使用SP创建一个字符串(来自查询),如“大师”、“绝地委员会”、“无”

这非常复杂,因为我必须支持SQL2000,并且不能使用公共表表达式


那么,我的选择是什么?我想得对吗?

为什么不使用表变量并使用连接而不是in子句?

为什么不使用表变量并使用连接而不是in子句?

我认为你可以使用
ISNULL(,)
来解决这个问题

我认为你可以使用
ISNULL(,)
来解决这个问题。。。我从没想过。我会立即尝试一下。谢谢你的建议,但这在SSRS中不起作用。“多值”参数作为选项字符串传递,表变量代码将不起作用。因此,我不能在两个系统中使用相同的脚本。。。我从没想过。我会立即尝试一下。谢谢你的建议,但这在SSRS中不起作用。“多值”参数作为选项字符串传递,表变量代码将不起作用。因此,我不能在两个系统中使用相同的脚本。