SQL Server存储过程的默认值行为

时间:2017-10-18 14:01:38

标签: sql sql-server

我在SQL Server中有一个存储过程。我希望在传递null时设置默认值;否则,使用传递的值。但是,我不确定我的代码是否反映了我想要的行为。如果没有,我该怎么办?

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)

2 个答案:

答案 0 :(得分:3)

只需在声明参数时指定默认值:

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

如果用户传入参数,它将使用它。如果他们排除参数,则默认为defaultTableName

但是,有一个警告。如果用户包含参数但显式指定NULL(通过调用dbo.test @PassedTableName = NULL),则值为NULL。在这种情况下,我建议:

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

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

答案 1 :(得分:2)

您可以使用Scanner scanner = new Scanner(System.in); do { System.out.println("Enter your grades for all the subjects: "); String text = new String(scanner.nextLine()); //... do what you want here ... } while (scanner.hasNextLine()); scanner.close(); 或在声明参数时指定默认值来执行此操作。

COALESCE

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

要么工作。使用DO STUFF WHERE tablename = COALESCE(@PassedTableName,'defaultTableName')

还有另一种方法
IF