Maliks, nehme ich an, einige waren mit Ihrem SQL verwirrt. Es war nicht sofort ersichtlich, dass Sie einen rekursiven CTE verwenden, um Jahre in einem Bereich zu generieren. There are lots of awesome ways, um eine Folge von Ganzzahlen (oder Zahlen im Allgemeinen) zu generieren, die mit einem CTE kombiniert werden können, um Variablen in einer Ansicht zu emulieren. Wenn Zahlen zu oft generiert werden, sollten Sie eine separate (und indizierte) Tabelle für sie erstellen.
Hier ist, was ich denke, dass Sie gesucht haben. Ich überspringe die CTEs, rank
und die Gruppierung, die Sie in Ihrer Frage nicht definiert haben. Sie können es ändern, wie Sie wollen:
WITH params AS (SELECT BegYr = 2005, EndYr=2014),
nums AS (SELECT DISTINCT n = number FROM master..spt_values WHERE number>=0)
SELECT Yr=BegYr + n FROM nums, params
WHERE n <= EndYr - BegYr
Allgemeiner hier ist eine Beispielansicht Abfrage, die CTE verwendet, um schön interne variable Konstruktion zu emulieren. Sie können es in Ihrer Version von SQL Server testen.
CREATE VIEW vwImportant_Users AS
WITH params AS (
SELECT
varType='%Admin%',
varMinStatus=1)
SELECT status, name
FROM sys.sysusers, params
WHERE status > varMinStatus OR name LIKE varType
SELECT * FROM vwImportant_Users
Nachgeben Ausgang:
status name
12 dbo
0 db_accessadmin
0 db_securityadmin
0 db_ddladmin
auch über JOIN
WITH params AS (SELECT varType='%Admin%', varMinStatus=1)
SELECT status, name
FROM sys.sysusers INNER JOIN params ON 1=1
WHERE status > varMinStatus OR name LIKE varType
auch über CROSS APPLY
WITH params AS (SELECT varType='%Admin%', varMinStatus=1)
SELECT status, name
FROM sys.sysusers CROSS APPLY params
WHERE status > varMinStatus OR name LIKE varType
eine Ansicht können Parameter nicht haben, das ist es. Sie müssen etwas anderes erstellen, wie eine Tabellenwertfunktion. Wenn Sie Probleme haben, eine Tabellenwertfunktion zu erstellen, geben Sie den entsprechenden Code und die Fehler ein, die Sie erhalten. – Paolo
@Paolo Ich habe die versuchte Abfrage für Tabellenwertfunktion gegeben – maliks
Denken Sie darüber nach, was eine Sicht ist. Es ist eine statische virtuelle Tabelle in der Datenbank. Per Definition können Parameter nicht da sein, da dies etwas anderes wäre. –