2010-01-18 18 views
5

¿Hay alguna manera de hacerlo más corto, por ejemplo, utilizando algún tipo de operador condicional en Transact-sql?Operador condicional en Transact-sql

IF @ParentBinaryAssetStructureId = -1 
BEGIN 
    SET @ParentBinaryAssetStructureId = NULL 
END 

UPDATE BinaryAssets.BinaryAssetStructures 
SET  ParentBinaryAssetStructureId = @ParentBinaryAssetStructureId 
WHERE BinaryAssetStructureId = @OriginalBinaryAssetStructureId 

Respuesta

7

USO NULLIF()

UPDATE BinaryAssets.BinaryAssetStructures 
SET  ParentBinaryAssetStructureId = NULLIF(@ParentBinaryAssetStructureId,-1) 
WHERE BinaryAssetStructureId = @OriginalBinaryAssetStructureId 
2
UPDATE BinaryAssets.BinaryAssetStructures 
SET  ParentBinaryAssetStructureId = 
    CASE ParentBinaryAssetStructureId 
    WHEN -1 THEN NULL 
    ELSE ParentBinaryAssetStructureId 
    END 
WHERE BinaryAssetStructureId = @OriginalBinaryAssetStructureId 

Dale que un torbellino

4

El ternario (condicional) del operador en C como idiomas:

x = doSomething ? 5 : 7 

se escribiría como esto en SQL:

SELECT @x = CASE WHEN @doSomething = 1 THEN 5 ELSE 0 END 

Puede haber múltiples casos (cuando cláusulas):

SELECT @x = CASE WHEN @doSomething = 1 THEN 5 WHEN @somethingElse = 1 THEN 20 ELSE 0 END 
Cuestiones relacionadas