2017-10-18 1 views
0

J'ai une procédure stockée dans SQL Server. Je veux définir la valeur par défaut quand null est passé; sinon, utilisez la valeur transmise. Cependant, je ne suis pas sûr que mon code reflète le comportement que je veux. Sinon, que dois-je faire?Comportement de valeur par défaut de procédure stockée SQL Server

CREATE PROCEDURE [dbo].[test] 
    (@PassedTableName nvarchar(100)) 
AS 
BEGIN 
    DECLARE @TableName AS NVarchar(255) = 'defaultTablenName' 

    SELECT @TableName = QUOTENAME(TABLE_NAME) 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME = @PassedTableName 

    DECLARE @sql0 AS NVARCHAR(MAX) 
    SELECT @sql0 = 'select count(*) from ' + @TableName 
    EXEC(@SQL0) 
+1

Je n'arrive pas à comprendre ce que vous essayez de faire ici. –

+1

select @TableName = isnull (QUOTENAME (TABLE_NAME), 'defaultTablenName') –

+0

Etes-vous en train d'essayer de définir des paramètres optionnels ou simplement d'envoyer une valeur NULL au paramètre? – NicoRiff

Répondre

3

Il suffit de spécifier la valeur par défaut lorsque le paramètre est déclaré:

CREATE PROCEDURE [dbo].[test] 
    (@PassedTableName nvarchar(100) = 'defaultTableName') 

Si l'utilisateur passe dans un paramètre, il l'utilisera. Si elles excluent le paramètre, il sera defaultTableName par défaut.

Un avertissement, cependant. Si l'utilisateur inclut le paramètre mais spécifie explicitement NULL (en appelant dbo.test @PassedTableName = NULL), la valeur sera NULL. Dans ce cas, je vous recommande:

CREATE PROCEDURE [dbo].[test] 
    (@PassedTableName nvarchar(100) = NULL) 

IF @PassedTableName IS NULL 
SET @PassedTableName = 'defaultTableName' 
+0

si la déclaration n'utilise pas 'defaultTableName' au lieu de null? – GuidoG

+0

@GuidoG sonne bien, l'exemple original était un peu vague. – BradC

2

Vous pouvez le faire en utilisant COALESCE ou en spécifiant la valeur par défaut lorsque le paramètre est déclaré.

CREATE PROCEDURE [dbo].[test] 
    (@PassedTableName nvarchar(100) = 'defaultTableName') 

ou

DO STUFF WHERE tablename = COALESCE(@PassedTableName,'defaultTableName') 

Ou fonctionnera. Il y a une autre façon d'utiliser IF

IF @PassedTableName IS NULL 
    SET @PassedTableName = 'defaultTableName';