Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 如果字段为空,如何返回错误,否则在联接期间返回所有行_Sql_Sql Server_Sql Server 2008_Null_Isnull - Fatal编程技术网

Sql 如果字段为空,如何返回错误,否则在联接期间返回所有行

Sql 如果字段为空,如何返回错误,否则在联接期间返回所有行,sql,sql-server,sql-server-2008,null,isnull,Sql,Sql Server,Sql Server 2008,Null,Isnull,我有下列表格 TableA(Field1,Field2) TableB(Field3,Field4) 现在我在这些表中选择值并返回。但是,如果表B中的字段3为null,则返回错误 我的程序如下 create proc name @Field1 varchar, @Field2 varchar, @Field3 varchar out, @Field4 varchar out, @Error varchar out AS BEGIN SELECT @Field2 = tA.Field2,

我有下列表格

TableA(Field1,Field2)
TableB(Field3,Field4)
现在我在这些表中选择值并返回。但是,如果
表B中的字段3
null
,则返回错误

我的程序如下

create proc name
@Field1 varchar,
@Field2 varchar,
@Field3 varchar out,
@Field4 varchar out,
@Error  varchar out
AS
BEGIN

SELECT @Field2  = tA.Field2, 
@Field3 =   tA.Field3,
FROM tA C INNER JOIN TableB tB ON
tA.Field1 = tB.Field1                   
WHERE tA.Field4 = @Field4
如果字段3为空,我不知道如何返回错误


我正在考虑编写另一个查询,用于检查此表是否为空

您可以使用RAISEERROR for use defined error


您可以尝试以下代码来引发错误消息:

   BEGIN TRY
         IF @Field3 IS NULL
            RAISERROR ('Fields 3 cannot be null .', 16,1);
    END TRY
    BEGIN CATCH
       SET @Error = ERROR_MESSAGE()

    END CATCH

听起来您需要在数据库中进行验证,比如使用插入触发器或
notnull
属性。但由于结果为空值而返回错误是错误的做法。如果需要文本错误,请使用
SELECT@Field3=ISNULL(tA.Field3,'error')…
SELECT@Field3=COALESCE(tA.Field3,'error')…
SELECT@Field3=CASE当tA.Field3为空时,则使用“error”否则tA.Field3结束…
@lad2025:谢谢,它是通过一些IF-ELSE来解决的。(对我来说很简单:)没有人,这不是最好的方法。我在找别的东西
   BEGIN TRY
         IF @Field3 IS NULL
            RAISERROR ('Fields 3 cannot be null .', 16,1);
    END TRY
    BEGIN CATCH
       SET @Error = ERROR_MESSAGE()

    END CATCH