我正在尝试在SQL中构建存储过程。
我有以下语法:
CREATE PROCEDURE [dbo].[getAllCitizens]
@NoInfo as nvarchar(50) = "No contact information inserted."
AS
BEGIN
SET NOCOUNT ON;
IF ctznPhone != null
BEGIN
SELECT ctznTz, ctznLname, ctznFname, ctznPhone
FROM tblCitizens
Where ctznLivestat=1
END
ELSE
BEGIN
IF ctznEml != null
BEGIN
SELECT ctznTz, ctznLname, ctznFname, ctznEml
FROM tblCitizens
Where ctznLivestat=1
END
ELSE
BEGIN
SELECT ctznTz, ctznLname, ctznFname, @NoInfo
FROM tblCitizens
Where ctznLivestat=1
END
END
END
如何告知列ctznPhone
和ctznEml
在哪个表中的过程?
我尝试了dbo.tablename.columname
以及()
和[]
的各种尝试,但它似乎无法发挥作用。
最终,此过程将由C#datareader调用。 我要做的是构建一个过程,当被调用时,将根据特定单元格中的信息从一行返回所选单元格:
ctznPhone
不为空,那么我想得到它。ctznEml
。@NoInfo
中的字符串)。我能以正确的方式解决这个问题吗?
答案 0 :(得分:6)
您可以使用COALESCE
:
COALESCE(表达式[,... n])
按顺序计算参数,并返回最初未计算为NULL的第一个表达式的当前值。
CREATE PROCEDURE [dbo].[getAllCitizens]
@NoInfo as nvarchar(50) = "No contact information inserted."
AS
BEGIN
SET NOCOUNT ON;
SELECT ctznTz, ctznLname, ctznFname,
COALESCE(ctznPhone, ctznEml, @NoInfo) AS contactInfo
FROM tblCitizens
WHERE ctznLivestat=1;
END