Tsql 创建SQL语句以同时使用SSM和SSR
我需要把这个问题安排一下。假设您已经创建了一个名为ParameterTesting的数据库,并创建了一个表,并按如下方式填充它: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
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中不起作用。“多值”参数作为选项字符串传递,表变量代码将不起作用。因此,我不能在两个系统中使用相同的脚本。