有没有办法根据声明值排除部分SQL语句?
例如;
DECLARE @OnlyY as VARCHAR(1) = 'Y'
SELECT count(*) from main where IDATE > '2016-01-01'
If @OnlyY = 'Y' THEN
AND Qualify = 'Y'
END IF
在这种情况下,如果@OnlyY不是Y,则if / endif之间的部分根本不会发生。
我需要这个的原因是因为我正在将Access 97应用程序移植到.NET。在Access 97应用程序中,有一个部件可以创建临时表,然后从该表生成报告。涉及的SQL是一组巨大的if / then语句,用于从临时表中删除数据。我可以构建DataTable以便在Datagridview中查看。我的问题是我无法让SSRS在if / then语句中具有与.NET相同的灵活性。
那我该怎么做呢?
答案 0 :(得分:2)
试试这个:
SELECT COUNT(*)
FROM main
WHERE IDATE > '2016-01-01' AND
((Qualify = 'Y') OR (@OnlyY <> 'Y'))
如果@OnlyY
不等于'Y'
,则WHERE
条款归结为:
WHERE IDATE > '2016-01-01'
否则,WHERE
子句变为:
WHERE IDATE > '2016-01-01' AND (Qualify = 'Y')
答案 1 :(得分:1)
您可以查看的一个选项是Dynamic SQL
,您可以在其中动态更改所需的任何内容。
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL = N'SELECT COUNT(*) FROM main WHERE IDATE > ''2016-01-01'''
IF @OnlyY = 'Y'
BEGIN
SET @SQL += N' AND Qualify = ''Y'''
END
EXECUTE sp_executesql @SQL