2011-04-28 127 views
6

¿Es posible tener una condición en si VISTASIF condición en vista en SQL Server

por ejemplo

CREATE VIEW 
as 

DECLARE @Count int 
SET @Count=-1 
select @Count=EmpID from EmployeeDetails where ID=200 
IF @Count=-1 
BEGIN 
SELECT * FROM TEAM1 
END 
ELSE 
BEGIN 
SELECT * FROM TEAM1 
END 
+1

Ponga un poco de esfuerzo en formatear sus preguntas [como se solicitó anteriormente] (http://stackoverflow.com/questions/5816306/problem-in-my-ms-sql-query-it-taking-2-mins-to -realizar). El ícono '{}' en la barra de herramientas te permite formatear el código. ¿Por qué ambas ramas del 'IF' hacen lo mismo? –

+1

@Martin gracias Martin haré esto la próxima vez – Navaneethan

+0

tiene alguna de las respuestas resueltas su problema? si es así, márquelo como respuesta, ya que ayudará a otros que tengan el mismo problema que usted en el futuro y lo busque en Google. –

Respuesta

2

No, yo no creo que esto es posible.

En su lugar, podría utilizar un procedimiento almacenado para lograr esta funcionalidad.

6

Vistas sólo permiten select como se indica en here

si usted tiene que hacer si en los valores de las columnas se puede utilizar un

SELECT 
CASE WHEN COLUMN1 = 1 THEN COLUMNX ELSE COLUMNY END 
FROM TABLE1 

si su necesidad es superior a esto debe crear un grupo selecto de una tabla función valorada en lugar de una vista.

Lo que se necesita es un procedimiento simple

CREATE PROCEDURE DOSOMETHING 
( 
    @ID INT 
) 
AS 
BEGIN 
    IF @ID > 100 
     SELECT 1 AS ID,'ME' AS NAME, GETDATE() AS VARIABLEDATECOL, NEWID() AS VARIABLEGUID 
    ELSE 
     SELECT 2 AS ID, 'YOU' AS NAME 
END 
8

Usted podría intentar algo solapada con una UNION:

SELECT {fieldlist} 
FROM Table1 
WHERE EXISTS(SELECT EmpID FROM EmployeeDetails WHERE ID = 200) 

UNION ALL 

SELECT {fieldlist} 
FROM Table2 
WHERE NOT EXISTS(SELECT EmpID FROM EmployeeDetails WHERE ID = 200) 

Este método requeriría dos instrucciones SELECT para devolver el mismo conjunto de campos, aunque sus fuentes pueden ser diferentes.

+0

Esto también hace la prueba de existencia dos veces. No se me ocurrió una manera de evitarlo, pero sospecho que podría haber una manera astuta. –

+0

Esto debe tener campos comunes. Pero en mi caso la primera tabla tiene 10 columnas y en la segunda tabla solo 2 columnas – Navaneethan

+0

Entonces una vista no puede ser utilizada ya que debe devolver el mismo conjunto de campos. – MartW

Cuestiones relacionadas