【问题标题】:Scalar_Variable Function with Multiple AND statements returning "NULL"具有多个 AND 语句返回“NULL”的 Scalar_Variable 函数
【发布时间】:2014-01-22 01:21:27
【问题描述】:

我在 sql 中编写 Scalar-Variable 函数以返回由整数映射的 strName。以下是我的脚本:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[Lookup_BSource_Value] 
(
      -- Add the parameters for the function here
      @AVal nvarchar(100)
)
RETURNS nvarchar(100)
AS
BEGIN
      -- Declare the return variable here
      DECLARE @Val nvarchar(100)
      SELECT @Val = Val

      FROM SMBase
      WHERE AName = 'a_source'
      AND (OTypeCode = 1084)
      AND (AVal = (@AVal))

      RETURN @Val
END

我应该得到“BA”的结果,但收到的是“NULL”。我的多个 AND 语句的语法是否正确?

编辑*

在我的 SSIS 包中使用该函数之前,我只是在做一个简单的 选择 dbo.Lookup_BSource_Value(XXXXXXXXX)

这给了我空值。

以下是我正在查询的表的逻辑架构:

USE [MSCRM_M_RC]
GO

/****** Object:  Table [dbo].[SMBase]    Script Date: 1/21/2014 6:29:48 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[SMBase](
    [OTypeCode] [int] NOT NULL,
    [AName] [nvarchar](100) NOT NULL,
    [AVal] [int] NOT NULL,
    [LaId] [int] NOT NULL,
    [OrgId] [uniqueidentifier] NOT NULL,
    [Val] [nvarchar](4000) NULL,
    [DOrder] [int] NULL,
    [VNumber] [timestamp] NULL,
    [SMId] [uniqueidentifier] NOT NULL,
 CONSTRAINT [cndx_PrimaryKey_SMap] PRIMARY KEY CLUSTERED 
(
    [SMId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY],
 CONSTRAINT [UQ_SMap] UNIQUE NONCLUSTERED 
(
    [OTCode] ASC,
    [AName] ASC,
    [AValue] ASC,
    [LaId] ASC,
    [OrgId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[SMBase] ADD  CONSTRAINT [DF_SMa_SMId]  DEFAULT (newid()) FOR [SMId]
GO

*编辑**

以下是我的 StringMapTable 的逻辑架构:

StringMap(SMID pk, OTypeCode,AName, AVal, LaID, OrgID fk, Val, DOrder, VNumber)

以下是我的 TPTRepair 表的逻辑架构:

TPTRepair(TPTRepairID pk, Name, Source, TT, LTHrs, CustID fk, PID fk)

问题如下:

“源”字段是 TPTRepair 中的整数。我正在编写以下标量函数来引用 StringMap 以从 StringMap 中的 Value 列返回字符串值。我必须有几个 ands 因为 AName hase to = 'a_source' 而 OTypeCode 必须 = 1084。

我的标量函数导致 NULL 并且不应该。从上面的标量函数中的多个 AND 语句来看,我的语法是否正确?

【问题讨论】:

  • 您能否展示基础表的架构、一些示例数据以及您调用该函数的准确程度?
  • @AaronBertrand 我已经为您请求的内容编辑了原始问题
  • 一些示例数据以及您正在使用的实际语法,而不是(XXXXXXXX)
  • @AaronBertrand 我已经发布了您要求的附加信息。抱歉花了一点时间。我昨天下班刚回来。

标签: sql-server function tsql ssis


【解决方案1】:

所以我显然是个白痴。这是最简单的事情。 OTypeCode= '10084' 而不是 '1084'。我是实习生。请原谅我;)这就是答案。

【讨论】:

    猜你喜欢
    • 2016-06-12
    • 2015-11-22
    • 2014-01-30
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多