Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 我试图在计算列中使用CASE语句有什么问题?_Sql Server_Case - Fatal编程技术网

Sql server 我试图在计算列中使用CASE语句有什么问题?

Sql server 我试图在计算列中使用CASE语句有什么问题?,sql-server,case,Sql Server,Case,我正在尝试创建一个计算列,该列将根据状态查找区域 以下是我所拥有的: CREATE FUNCTION fnDonorRegion (@Region VARCHAR(10)) RETURNS VARCHAR AS BEGIN RETURN CASE WHEN DONOR.[State] IN ('Connecticut', 'Maine', 'Massachusetts', 'New Hampshire', 'Rhode Island', 'Vermo

我正在尝试创建一个计算列,该列将根据
状态
查找区域

以下是我所拥有的:

CREATE FUNCTION fnDonorRegion (@Region VARCHAR(10))
RETURNS VARCHAR
AS
BEGIN
    RETURN
        CASE
           WHEN DONOR.[State] IN ('Connecticut', 'Maine', 'Massachusetts', 'New Hampshire', 'Rhode Island', 'Vermont', 'New Jersey', 'New York', 'Pennsylvania') 
              THEN 'Northeast'
           WHEN DONOR.[State] IN ('Illinois', 'Indiana', 'Michigan', 'Ohio', 'Wisconsin', 'Iowa', 'Kansas', 'Minnesota', 'Missouri', 'Nebraska', 'North Dakota', 'South Dakota') 
              THEN 'Midwest'
           WHEN DONOR.[State] IN ('Delaware', 'Florida', 'Georgia', 'Maryland', 'North Carolina', 'South Carolina', 'Virginia', 'District of Columbia', 'West Virginia', 'Alabama', 'Kentucky', 'Mississippi', 'Tennessee', 'Arkansas', 'Louisiana', 'Oklahoma', 'Texas') 
              THEN 'South'
           ELSE 'West'
        END
END

ALTER TABLE tblDONOR
ADD Region AS fnDonorRegion
我不断得到错误:

Msg 4104,16级,状态1,程序fnDonorRegion,第12行
无法绑定多部分标识符“D.State”


非常感谢您的帮助

您应该检查参数,而不是表格。假设参数是状态

CREATE FUNCTION fnDonorRegion (@state varchar(10))
RETURNS varchar
AS
BEGIN
  RETURN
  CASE
    WHEN @state  IN ('Connecticut', 'Maine', 'Massachusetts', 'New Hampshire', 'Rhode
        Island', 'Vermont', 'New Jersey', 'New York', 'Pennsylvania') THEN 'Northeast'
    WHEN @state   IN ('Illinois', 'Indiana', 'Michigan', 'Ohio', 'Wisconsin',
      'Iowa', 'Kansas', 'Minnesota', 'Missouri', 'Nebraska', 'North Dakota', 'South Dakota') THEN 'Midwest'
    WHEN @state   IN ('Delaware', 'Florida', 'Georgia', 'Maryland', 'North Carolina',
      'South Carolina', 'Virginia', 'District of Columbia', 'West Virginia', 'Alabama', 'Kentucky',
      'Mississippi', 'Tennessee', 'Arkansas', 'Louisiana', 'Oklahoma', 'Texas') THEN 'South'
    ELSE 'West'
  END
END

ALTER TABLE tblDONOR
ADD Region AS fnDonorRegion([state]) -- assume your table has a column named state
试试这个:

CREATE FUNCTION dbo.fnDonorRegion
    (@Region VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
    DECLARE @Result  VARCHAR(100)

    SELECT 
        @Result= CASE
                    WHEN DONOR.[State] IN (@Region)
                       THEN 'Northeast'
                    WHEN DONOR.[State] IN(@Region)
                       THEN 'Midwest'                  
                    ELSE 'West'
                 END 
    FROM tblDONOR AS DONOR

    RETURN @Result  
 END;

SELECT dbo.fnDonorRegion('Connecticut')

您应该在
CASE
语句中使用输入变量

Create FUNCTION fnDonorRegion (@Region varchar(50))
RETURNS varchar(10)
AS
BEGIN
  RETURN
  CASE
    WHEN @Region IN ('Connecticut', 'Maine', 'Massachusetts', 'New Hampshire', 'Rhode
        Island', 'Vermont', 'New Jersey', 'New York', 'Pennsylvania') THEN 'Northeast'
    WHEN @Region IN ('Illinois', 'Indiana', 'Michigan', 'Ohio', 'Wisconsin',
      'Iowa', 'Kansas', 'Minnesota', 'Missouri', 'Nebraska', 'North Dakota', 'South Dakota') THEN 'Midwest'
    WHEN @Region IN ('Delaware', 'Florida', 'Georgia', 'Maryland', 'North Carolina',
      'South Carolina', 'Virginia', 'District of Columbia', 'West Virginia', 'Alabama', 'Kentucky',
      'Mississippi', 'Tennessee', 'Arkansas', 'Louisiana', 'Oklahoma', 'Texas') THEN 'South'
    ELSE 'West'
  ENd
ENd

select dbo.fnDonorRegion('Mississippi')

您的
from
子句在哪里?应该在哪里@SankarRajYou正在尝试上面哪个数据库,捐赠者是一个表吗?@deepakl这是我和我的团队创建的一个数据库,捐赠者是一个表,州是一个列。我想你要做的是给一个@region(州名)作为输入,得到的输出是
东北
中西部
西部
南部
。我说得对吗?