Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL 2008-值为NULL时退出_Sql Server_Tsql_Isnull_Raiserror - Fatal编程技术网

Sql server T-SQL 2008-值为NULL时退出

Sql server T-SQL 2008-值为NULL时退出,sql-server,tsql,isnull,raiserror,Sql Server,Tsql,Isnull,Raiserror,我正在寻找一种在@Value为null时退出T-SQL脚本的方法。到目前为止,我已经做到了这一点,但没有达到预期效果: SELECT @Value, CASE WHEN @Value IS NULL RAISERROR('EXIT', 16, 1) FROM table WHERE name LIKE 'test' 也许这对你有用: DECLARE @Value INT = 1 IF( @Value IS NU

我正在寻找一种在@Value为null时退出T-SQL脚本的方法。到目前为止,我已经做到了这一点,但没有达到预期效果:

SELECT 
    @Value,
    CASE 
       WHEN @Value IS NULL   
          RAISERROR('EXIT', 16, 1) 
FROM 
    table 
WHERE 
    name LIKE 'test'

也许这对你有用:

DECLARE @Value INT = 1
IF( @Value IS NULL)
BEGIN
    RAISERROR('Exit',16,1)
END
ELSE
BEGIN
    SELECT @Value
END

也许这对你有用:

DECLARE @Value INT = 1
IF( @Value IS NULL)
BEGIN
    RAISERROR('Exit',16,1)
END
ELSE
BEGIN
    SELECT @Value
END

使用光标和临时表可以获得所需的输出。不知道这是不是目标

USE AdventureWorksLT2012

DECLARE @CustomerID AS INT
DECLARE @CompanyName AS VARCHAR(MAX)
DECLARE @EmailAddress AS VARCHAR(MAX)

CREATE TABLE #output (CustomerID INT,CompanyName VARCHAR(MAX),EmailAddress VARCHAR(MAX)) 

DECLARE testCursor CURSOR 
    FOR 
    SELECT TOP (100) 
       CustomerID
      ,CompanyName
      ,EmailAddress
    FROM SalesLT.Customer   
    ORDER BY customerID DESC;

OPEN testCursor;

FETCH NEXT FROM testCursor
INTO @CustomerID, @CompanyName, @emailAddress;
if @EmailAddress is not null
BEGIN 
    INSERT INTO #output values( @CustomerID, @CompanyName, @emailAddress);  
    WHILE @@FETCH_STATUS = 0  
     BEGIN  
        FETCH NEXT FROM testCursor
        INTO @CustomerID, @CompanyName, @emailAddress;
        if @EmailAddress is null 
        BEGIN
          RAISERROR('Exit',16,1);
          BREAK;
        end
        INSERT INTO #output values( @CustomerID, @CompanyName, @emailAddress);
       END;
    END
CLOSE testCursor;
DEALLOCATE testCursor;

SELECT * FROM #output;

DROP TABLE #output

使用光标和临时表可以获得所需的输出。不知道这是不是目标

USE AdventureWorksLT2012

DECLARE @CustomerID AS INT
DECLARE @CompanyName AS VARCHAR(MAX)
DECLARE @EmailAddress AS VARCHAR(MAX)

CREATE TABLE #output (CustomerID INT,CompanyName VARCHAR(MAX),EmailAddress VARCHAR(MAX)) 

DECLARE testCursor CURSOR 
    FOR 
    SELECT TOP (100) 
       CustomerID
      ,CompanyName
      ,EmailAddress
    FROM SalesLT.Customer   
    ORDER BY customerID DESC;

OPEN testCursor;

FETCH NEXT FROM testCursor
INTO @CustomerID, @CompanyName, @emailAddress;
if @EmailAddress is not null
BEGIN 
    INSERT INTO #output values( @CustomerID, @CompanyName, @emailAddress);  
    WHILE @@FETCH_STATUS = 0  
     BEGIN  
        FETCH NEXT FROM testCursor
        INTO @CustomerID, @CompanyName, @emailAddress;
        if @EmailAddress is null 
        BEGIN
          RAISERROR('Exit',16,1);
          BREAK;
        end
        INSERT INTO #output values( @CustomerID, @CompanyName, @emailAddress);
       END;
    END
CLOSE testCursor;
DEALLOCATE testCursor;

SELECT * FROM #output;

DROP TABLE #output

CASE
用于在非命令性上下文中(例如在
SELECT
中)做出决策
如果在过程上下文中使用,例如在查询或DDL语句之外的T-SQL批处理。
CASE
是一个表达式(如
a+b
),它最终返回一个单一的原子值(一个
INT
,一个
VARCHAR
)-但它不能用于程序流控制-如果
,则需要使用
ELSE
等。对于该
案例,当在非命令性上下文中(例如在
选择
中)做出决策时,使用
如果在过程上下文中使用,例如在查询或DDL语句之外的T-SQL批处理。
CASE
是一个表达式(如
a+b
),它最终返回一个单一的原子值(一个
INT
,一个
VARCHAR
)-但它不能用于程序流控制-如果
,则需要使用
ELSE
等等