我有一个工作的IF EXISTS命令来选择已经存在于表中的PID_GUID,或者选择一个值作为PID_GUID(如果表中已经不存在的话)。命令看起来像这样;
IF EXISTS (SELECT PID_GUID FROM PID WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595')
BEGIN
SELECT PID_GUID FROM PID WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595'
End
ELSE
SELECT 'a70600f4-1cff-4284-a2ce-5eb19f47cf19'
现在我想做的是设置一个变量,比如这个;
Daclare @OLDPID = VARCHAR(36)
SET @OLDPID = IF EXISTS (SELECT PID_GUID FROM PID WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595')
BEGIN
SELECT PID_GUID FROM PID WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595'
End
ELSE
SELECT 'a70600f4-1cff-4284-a2ce-5eb19f47cf19'
我将如何在SQL2008中执行此操作?
答案 0 :(得分:2)
在每个语句中设置变量:
IF EXISTS (SELECT PID_GUID FROM PID WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595')
BEGIN
SELECT @OLDPID = PID_GUID
FROM PID
WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595'
End
ELSE
SELECT @OLDPID = 'a70600f4-1cff-4284-a2ce-5eb19f47cf19';
实际上,我更倾向于使用:
DECLARE @OLDPID VARCHAR(36) = 'a70600f4-1cff-4284-a2ce-5eb19f47cf19';
IF EXISTS (SELECT PID_GUID
FROM PID
WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595'
)
BEGIN
SELECT @OLDPID = PID_GUID
FROM PID
WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595';
END;
答案 1 :(得分:1)
我使用COALESCE()
因为COALESCE()
可以做任何事情。
SELECT @OLDPID = COALESCE((SELECT PID_GUID
FROM PID WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595'
FETCH FIRST 1 ROW ONLY),
'a70600f4-1cff-4284-a2ce-5eb19f47cf19')
我们不需要发臭的IF语句!
SQL Server -
SELECT @OLDPID = COALESCE((SELECT TOP 1 PID_GUID
FROM PID WHERE EDI_ID = '12874' OR PID = 'ROBERT' OR PID = 'R595'),
'a70600f4-1cff-4284-a2ce-5eb19f47cf19')