Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Database & SysAdmin
  3. Database
  4. Using results multiple times

Using results multiple times

Scheduled Pinned Locked Moved Database
databasesql-serversysadminquestion
5 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mikker_123
    wrote on last edited by
    #1

    OK, probably it is an easy answer, but I just can't get it working. I'm working on SQL SERVER 2005. Here is stored procedure: SELECT TOP (50) * FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN) SELECT * FROM h_Encounter WHERE CaseId IN (SELECT TOP (50) CaseId FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN)) SELECT cn.*, u.Username AS Username FROM h_CaseNote cn INNER JOIN c_User u ON u.UserId = cn.UserId WHERE CaseId IN (SELECT TOP (50) CaseId FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN)) SELECT * FROM h_CasePDR WHERE CaseId IN (SELECT TOP (50) CaseId FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN)) RETURN So it is obvious what I'm trying to do? I just want to reuse selected cases. I tried with: WITH C AS ( SELECT TOP (50) CaseId FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN) SELECT * FROM C SELECT * FROM h_Encounter WHERE CaseId IN (SELECT CaseId FROM C) SELECT cn.*, u.Username AS Username FROM h_CaseNote cn INNER JOIN c_User u ON u.UserId = cn.UserId WHERE CaseId IN (SELECT CaseId FROM C) SELECT * FROM h_CasePDR WHERE CaseId IN (SELEC

    S 1 Reply Last reply
    0
    • M mikker_123

      OK, probably it is an easy answer, but I just can't get it working. I'm working on SQL SERVER 2005. Here is stored procedure: SELECT TOP (50) * FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN) SELECT * FROM h_Encounter WHERE CaseId IN (SELECT TOP (50) CaseId FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN)) SELECT cn.*, u.Username AS Username FROM h_CaseNote cn INNER JOIN c_User u ON u.UserId = cn.UserId WHERE CaseId IN (SELECT TOP (50) CaseId FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN)) SELECT * FROM h_CasePDR WHERE CaseId IN (SELECT TOP (50) CaseId FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN)) RETURN So it is obvious what I'm trying to do? I just want to reuse selected cases. I tried with: WITH C AS ( SELECT TOP (50) CaseId FROM h_Case WHERE ((FirstName LIKE @FirstName) AND (LastName LIKE @LastName) OR ((IsNull(Aliases, '') LIKE @FirstName) AND (IsNull(Aliases, '') LIKE @LastName))) AND (DOB BETWEEN @DobFrom AND @DobTo) AND (IsNull(GenderId, -1) BETWEEN @GenderFrom AND @GenderTo) AND (IsNull(PHN, '') LIKE @PHN) SELECT * FROM C SELECT * FROM h_Encounter WHERE CaseId IN (SELECT CaseId FROM C) SELECT cn.*, u.Username AS Username FROM h_CaseNote cn INNER JOIN c_User u ON u.UserId = cn.UserId WHERE CaseId IN (SELECT CaseId FROM C) SELECT * FROM h_CasePDR WHERE CaseId IN (SELEC

      S Offline
      S Offline
      snorkie
      wrote on last edited by
      #2

      The temporary table is most likely your best resort. The table will sit in memory waiting till the end of the procedure to be used. That being said, if you want to be lazy... You could do what I call a "String Procedure" (instead of a stored procedure). Remember that this method is very vulnerable to SQL injection/truncation attacks DECLARE @FilterSQL AS varchar(8000) SET @SQL = 'SELECT TOP (50) * FROM h_Case WHERE ((FirstName LIKE ''' + @FirstName + ''') AND (LastName LIKE ''' + @LastName + ''') OR ((IsNull(Aliases, '''') LIKE ''' + @FirstName + ''' AND (IsNull(Aliases, '''') LIKE ''' + @LastName + '''))) AND (DOB BETWEEN + ''' @DobFrom + '''AND ''' + @DobTo + ''') AND (IsNull(GenderId, -1) BETWEEN ' + @GenderFrom + ' AND ' + @GenderTo + ') AND (IsNull(PHN, '''') LIKE ''' + @PHN + ''')' Then insert the @SQL variable into your other SQL. So use the temporary table. Hogan

      M 1 Reply Last reply
      0
      • S snorkie

        The temporary table is most likely your best resort. The table will sit in memory waiting till the end of the procedure to be used. That being said, if you want to be lazy... You could do what I call a "String Procedure" (instead of a stored procedure). Remember that this method is very vulnerable to SQL injection/truncation attacks DECLARE @FilterSQL AS varchar(8000) SET @SQL = 'SELECT TOP (50) * FROM h_Case WHERE ((FirstName LIKE ''' + @FirstName + ''') AND (LastName LIKE ''' + @LastName + ''') OR ((IsNull(Aliases, '''') LIKE ''' + @FirstName + ''' AND (IsNull(Aliases, '''') LIKE ''' + @LastName + '''))) AND (DOB BETWEEN + ''' @DobFrom + '''AND ''' + @DobTo + ''') AND (IsNull(GenderId, -1) BETWEEN ' + @GenderFrom + ' AND ' + @GenderTo + ') AND (IsNull(PHN, '''') LIKE ''' + @PHN + ''')' Then insert the @SQL variable into your other SQL. So use the temporary table. Hogan

        M Offline
        M Offline
        mikker_123
        wrote on last edited by
        #3

        Would it be smarter to use Table variables in this case? I read that they interrupt parallel execution. Thanks for your previous answer in any case!

        S 1 Reply Last reply
        0
        • M mikker_123

          Would it be smarter to use Table variables in this case? I read that they interrupt parallel execution. Thanks for your previous answer in any case!

          S Offline
          S Offline
          snorkie
          wrote on last edited by
          #4

          Yes, I agree that table variables are the best solution here. Hogan

          M 1 Reply Last reply
          0
          • S snorkie

            Yes, I agree that table variables are the best solution here. Hogan

            M Offline
            M Offline
            mikker_123
            wrote on last edited by
            #5

            Tnx for your answers!

            1 Reply Last reply
            0
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • World
            • Users
            • Groups