Solved

Simplify This SQL Statement

Posted on 2004-09-20
14
222 Views
Last Modified: 2011-08-18
Hi Guys!

What is the simplest way that this can be expressed? All I want to output is the Program_ID - whether freshly created or not:


SET NOCOUNT OFF
IF NOT EXISTS (
      SELECT Program_ID
      FROM A_Program
      WHERE
            (Program_Name = 'Other') AND
            (Payroll_ID = 0) AND
            (Division_ID = 1234)
      )
      BEGIN
      INSERT INTO A_Program (
            Program_Name,
            Payroll_ID,
            Division_ID
            )
      VALUES (
            'Other',
            0,
            1234
            )
      SELECT @@IDENTITY AS Program_ID
      END
ELSE
      BEGIN
      SELECT Program_ID
      FROM A_Program
      WHERE
            (Program_Name = 'Other') AND
            (Payroll_ID = 0) AND
            (Division_ID = 1234)
      END
SET NOCOUNT ON


Thanx

Dave
0
Comment
Question by:dbabbitt
  • 5
  • 4
  • 3
  • +2
14 Comments
 
LVL 8

Expert Comment

by:MartinCMS
ID: 12103584
your statement is as simple as it can get.  However, combine your insert with select into one query like....


INSERT INTO A_Program (Program_Name,Payroll_ID,Division_ID)
SELECT Program_Name,Payroll_ID,Division_ID
FROM A_Program
WHERE (Program_Name = 'Other') AND (Payroll_ID = 0) AND (Division_ID = 1234)
0
 
LVL 7

Expert Comment

by:FDzjuba
ID: 12103587
DECLARE @programID as uniqueidentifier;

SET @programID = (SELECT Program_ID
     FROM A_Program
     WHERE
          (Program_Name = 'Other') AND
          (Payroll_ID = 0) AND
          (Division_ID = 1234)
     )

IF @programID IS NULL
BEGIN
   SET @programID =newid();
   INSERT INTO A_Program (
          program_id,
          Program_Name,
          Payroll_ID,
          Division_ID
          )
     VALUES (
          @programID,
          'Other',
          0,
          1234
          )
      SELECT @programID AS Program_ID
END
0
 
LVL 26

Accepted Solution

by:
Hilaire earned 50 total points
ID: 12103634
Here's an option

SET NOCOUNT OFF
     DECLARE @ID int
     SELECT @ID = Program_ID
     FROM A_Program
     WHERE
          (Program_Name = 'Other') AND
          (Payroll_ID = 0) AND
          (Division_ID = 1234)
    IF @@ROWCOUNT = 0
    BEGIN
     INSERT INTO A_Program (
          Program_Name,
          Payroll_ID,
          Division_ID
          )
     VALUES (
          'Other',
          0,
          1234
          )
     SELECT @ID = scope_identity()
     END
select @ID
SET NOCOUNT ON
0
Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

 

Author Comment

by:dbabbitt
ID: 12103674
Comment from MartinCMS gets:

Server: Msg 206, Level 16, State 2, Line 3
Operand type clash: int is incompatible with uniqueidentifier
Server: Msg 206, Level 16, State 1, Line 14
Operand type clash: uniqueidentifier is incompatible with int


I might spend some time making it work, though.
0
 

Author Comment

by:dbabbitt
ID: 12103689
Whoops! That was Comment from FDzjuba.
0
 

Author Comment

by:dbabbitt
ID: 12103737
Comment from Hilaire gets two rowsets when the 'Other' is initially not there. Is that a bad thing? Can the SQL be cleaned up so that it doesn't appear?
0
 
LVL 7

Expert Comment

by:FDzjuba
ID: 12103894
ok, i thought you use uniqueidentifier, try this one then

DECLARE @programID as int;

SET @programID = (SELECT Program_ID
     FROM A_Program
     WHERE
          (Program_Name = 'Other') AND
          (Payroll_ID = 0) AND
          (Division_ID = 1234)
     )

IF @programID IS NULL
BEGIN
   INSERT INTO A_Program (
          Program_Name,
          Payroll_ID,
          Division_ID
          )
     VALUES (
          'Other',
          0,
          1234
          )
      SELECT @@IDENTITY AS Program_ID
END
ELSE
BEGIN
    SELECT @programID AS Program_ID
END
0
 

Author Comment

by:dbabbitt
ID: 12104212
Also, I have my SET NOCOUNT ON and SET NOCOUNT OFF mixed up. :-\
0
 
LVL 7

Expert Comment

by:FDzjuba
ID: 12104275
what do you mean?

if you want to @@IDENTITY  to work, i think  you need SET NOCOUNT OFF.
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 12108879
FDzjuba,

>>if you want to @@IDENTITY  to work, i think  you need SET NOCOUNT OFF. <<
Really?  I think yu may want to double check this.  There is no relation between @@IDENTITY and SET NOCOUNT ON | OFF
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 12108881
>>Also, I have my SET NOCOUNT ON and SET NOCOUNT OFF mixed up.<<
You will get better performance with SET NOCOUNT ON
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 12108890
Also, can we see some movement on these abandoned questions:
1 07/20/2004 500 Best HTML Row Balancing Algorithm  Open ColdFusion
2 03/24/2004 500 ODBC--call failed Error in SQL Record Se...  Open Active Server Pages (ASP)
0
 

Author Comment

by:dbabbitt
ID: 12110911
Yes, I still need answers on those questions - are you going to help?
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 12112304
Thanks.  I appreciate you closing out those old questions.
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction SQL Server Integration Services can read XML files, that’s known by every BI developer.  (If you didn’t, don’t worry, I’m aiming this article at newcomers as well.) But how far can you go?  When does the XML Source component become …
Load balancing is the method of dividing the total amount of work performed by one computer between two or more computers. Its aim is to get more work done in the same amount of time, ensuring that all the users get served faster.
Via a live example, show how to extract information from SQL Server on Database, Connection and Server properties
Via a live example, show how to shrink a transaction log file down to a reasonable size.

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question