2016-07-14 11 views
1

Ich möchte eine Variable in SQL Server festlegen, die Datum aus einer Sicht die Abfrage Ich bin mitist es möglich, Variable innerhalb einer Ansicht in Sql Server zu setzen?

declare @var varchar(20) 
set @var = (SELECT Current_Period_SID FROM dbo.VW_Current_Period_SID_USNT) 

nur gefragt, ist die Auswahl ist es eine Möglichkeit, Variablen in einer Ansicht so etwas wie

CREATE VIEW mp_test AS 
declare @var varchar(20) 

set @var = (SELECT Current_Period_SID FROM dbo.VW_Current_Period_SID_USNT) 

GO 
einstellen

Dies führt zu Fehler

+0

können Sie eine Funktion schreiben, um eine Variable zu setzen und sie zurückbringen. Das Verwenden einer Ansicht ist nicht die richtige Methode. –

+0

Es sollte auch beachtet werden, dass, wenn Ihre Unterabfrage mehr als einen Wert zurückgibt, ein anderer Fehler angezeigt wird. – BJones

+0

Danke für die Antwort, ich werde dies als eine Funktion tun dann – mb1987

Antwort

1

Nein. Das können Sie in einer Ansicht nicht tun. Ich bin nicht einmal sicher, was der Punkt der obigen Ansicht wäre, da es keinen Wert zurückgibt. Selbst wenn du könntest, würdest du nicht wollen. Eine Variable wie diese kann nur einen varchar (20) -Wert speichern. Ohne eine Anweisung "order by" und "top" würden Sie entweder einen Fehler oder einen nicht-deterministischen Wert erhalten, es sei denn, Ihre Tabelle enthält nur einen einzigen Datensatz.

+0

Danke für die Antwort, wird es dann als eine Funktion tun – mb1987

0

Sie können mit CTE eine Variable in Ihrer Sicht fälschen. 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 
Verwandte Themen