Tag: syndicated

  • Open Live Writer

    I’m writing this post from the Open Live Writer project software. I’ve used Live Writer for years, but it’s shown its age. Not the least of which is doens’t support OAuth2, so I haven’t been able to use it with my Blogger blogs.

    That should change, but we’ll see. Scott Hanselman noted there’s an open source fork of the software. I downloaded it today, and it’s slightly different, but not much. Mostly fonts from what I see.

    I may clone the project and see if I can fix things myself. There are some nagging items for me. However you should get the latest version and keep an eye on the project if you want a better blogging software tool.

  • Running Powershell with Task Scheduler

    Another post for me that is simple and hopefully serves as an example for people trying to get blogging as#SQLNewBloggers.

    One of the things I needed to do with my SQL Saturday download process was run this automatically. I don’t want to remember to do this, so I decided to set this up on a schedule.

    I ran a quick search and it seemed to be a simple process. Essentially I run the Task Scheduler application and then call my script as a parameter to the PowerShell exe. The first step is to run Task Scheduler.

    2015-11-05 11_43_36-Task Scheduler

    This has a list of jobs, which I found some to be interesting. I disabled Adobe and a few others. Those are really annoying. I clicked "Create a basic task".

    2015-11-05 11_43_47-Task Scheduler

    The basic task is a wizard to walkthrough. First enter a name and description. Use something that will help you in 5 months when this breaks.

    2015-11-05 11_44_07-Create Basic Task Wizard

    I decided to run this daily. It’s not a big deal to me, so I’ll let it just go.

    2015-11-05 11_44_16-Create Basic Task Wizard

    The time doesn’t matter, and I let it run in the middle of the day. This way I might notice it running sometimes and that will motivate me to keep working on this process.

    2015-11-05 11_44_22-Create Basic Task Wizard

    I want to run a program, so I choose that in the next step.

    2015-11-05 11_44_29-Create Basic Task Wizard

    The dialog wants to know which program. In my case, I’ll have to browse to my PoSh code.

    2015-11-05 11_44_36-Create Basic Task Wizard

    I pick my code and it puts the path in here. However that won’t run as is. If you’ve used PoSh, you know this doesn’t work.

    2015-11-05 11_44_44-Create Basic Task Wizard

    What I need to do is call powershell.exe. I found this in the reference item below and what I do is add "powershell" to the front of my file, and then use the "-file" parameter. I also enclose my PoSh script in quotes.

    2015-11-05 11_44_58-Create Basic Task Wizard

    When I click next, I get the warning, which I accept.

    2015-11-05 11_45_05-Task Scheduler

    There’s a summary after this, but I say OK to that, and then run the script from the Task Scheduler. It works perfectly, so I stop there.

    Now we’ll see how it works over time. And if I get the next step working.

    SQLNewBlogger

    This was a quick process for me. A google search, a 2 minute read, and then 2 minutes to build the task.

    It took maybe 10 minutes to write this post, most of which was taking the screen shots and resizing them.

    You can do this.

    References

    I just used one link, which was from the Scripting Guy blog.

  • #SQLFamily Feud

    I’ve started a new project. Actually, I started this well over a year ago, but I lost track of it and last week, despite the craziness, I was reminded of the effort and decided to get it going.

    What is the Game?

    A few of us were chatting about fun things at events and someone came up with the idea of Family Feud.  I thought it was great and started collecting questions. I then began organizing them, thinking I’d send out the list to 1000 people and get lots of responses.

    We would have the data available, and distribute it to someone at an event, such as SQL Saturday, and allow them to run a game. A game typically is two teams competing against each other, trying to give the top answers to a particular questions. Sometimes there are 4 answers, sometimes 6 or 7, but the idea is to get three of the answers for a team to win points. The first team to buzz in, or in this case, maybe signal the moderator gets to answer, each person in turn.

    Three wrong answers and the other team gets one chance to answer and win the round.

    I envision that we’d allow each group to collect points in maybe two rounds, and then we’d have a final round. The final round is one person from each team answering a set of questions. I’d say we do 5 to keep it quick. The second person doesn’t hear the first person’s answers, and together they need 200 points, with the count of survey answers matching their answers being added to each sum. Duplicates are not allowed.

    It’s a little cumbersome to explain, but watch the show on YouTube to get an idea how it works.

    Delays and Distractions

    However, I wanted to narrow the field, and didn’t want to send this in the SSC newsletter to everyone. Perhaps that was a mistake, but in compiling my list of people, I got distracted. Building a large group to email to is tedious, and despite some OCD on my part, I also have a little Short-Attention-Span-Syndrome.

    I had a soft launch last week, posting the first survey on Twitter and getting 100 responses in a few hours. That was kind of cool.

    I’ve got 6 surveys, which is a good start. I’m thinking if this works, that I’ll look to run additional surveys and collect more data that can be used in the future.

    What’s Coming?

    I am planning to randomly announce surveys on the @SQLServerCentrl and @way0utwest Twitter accounts this week to try and get more responses, but distribute them around the entire #sqlfamily.

    If you want to participate, watch out for the #sqlfamilyfeud hashtag later this week and send your answers in quick.

    If you’re an event organizer and want a copy of the datasets, feel free to ping me.

  • Puzzled by T-SQL

    Live blogging this a bit as I try things. This will update a bit, so you’ll have to read through.

    Adam Machanic posted this: T-SQL Puzzle-How many rows will this return? SELECT*FROM(VALUES(1),(2))AS x(i)WHERE EXISTS(SELECT MAX(i)FROM(VALUES(1))AS y(i)WHERE y.i=x.i)

    I was in a doctor’s office waiting at the time, but I responded that I didn’t think one row was right. I didn’t have the chance to see what happened, so I couldn’t reason through what was happening. Maybe I should have been able to? Not sure.

    I got home and ran this (thanks, SQL Prompt):

    SELECT
         *
       FROM     ( VALUES ( 1), ( 2) ) AS x ( i )
       WHERE     EXISTS ( SELECT  MAX(y.i)
                        FROM
                        ( VALUES ( 1) ) AS y ( i )
                   WHERE
                     y.i = x.i );
    

    I get two rows back, a 1 and a 2. Very strange.

    I tried experimenting a bit. I created tables and put data in there. Maybe there’s something I don’t get in the VALUES() clause.

    CREATE TABLE mytable99 (id INT);
    CREATE TABLE mytable999 (id INT);
    GO
    INSERT dbo.mytable99
    ( id )
    VALUES
    ( 1 ), (2);
    INSERT dbo.mytable999
    ( id )
    VALUES
    ( 1 )
    ;
    GO
    SELECT
    *
    FROM
    dbo.mytable99 AS x
    WHERE
    EXISTS ( SELECT MAX(y.id)
            FROM dbo.mytable999 AS y
            WHERE y.id = x.id );
    
    

    Same result.

    Hmmm, Adam added a clue. Why does select max(1) work?

    2015-12-03 13_43_15-Photos

    I was guessing that max() operates on the scalar set of [1]. However I’m not sure.

    I then did this:

    UPDATE dbo.mytable999 SET id = 9;
    

    When I re-ran the query, still two rows. Without a match.

    Next I added another row to the first table.

    INSERT dbo.mytable99
    ( id)
    VALUES
    ( 3 );
    

    Now I get three rows.

    What I’m guessing (at this point) is that the correlated subquery returns a 1 for every row of the first table, so this means I get the size and shape of that table. The EXISTS() is always satisfied.

    I’ll be interested to learn what is happening, or if I’m right.

    Update: I’m not.

    Or semi-right.

    The exists is satisfied, but why?

    Adam posted a second hint asking me to remove the max(). I did that and got 1 row. Well that’s interesting. How does the aggregate affect the correlated subquery, and how does this affect the Exists().

    I decided to break down the query inside the EXISTS(). I did this with scalar values. Since I’ve been dealing with two rows, I used those two scalar values.

    	 SELECT
                    y.i --MAX(y.i)
                  FROM
                    ( VALUES ( 1) ) AS y ( i ) 
    			  WHERE
                    y.i = 1 ;
    
    	 SELECT
                    y.i --MAX(y.i)
                  FROM
                    ( VALUES ( 1) ) AS y ( i ) 
    			  WHERE
                    y.i = 2;
    

    With these queries, I get one row and zero rows, just an empty set. That makes sense in terms of why removing the MAX() gives me one row in the whole thing.

    Next I added the MAX back.

    	 SELECT
                    MAX(y.i)
                  FROM
                    ( VALUES ( 1) ) AS y ( i ) 
    			  WHERE
                    y.i = 1 ;
    
    	 SELECT
                    MAX(y.i)
                  FROM
                    ( VALUES ( 1) ) AS y ( i ) 
    			  WHERE
                    y.i = 2;
    

    Now I get one row for the first, and one row for the second? Huh? However the second set is a row with NULL in it. I checked the EXISTS() documentation, and sure enough, if there are rows, this returns true, even if the row has a null value. This isn’t the value of a row, but rather just its presence.

    I then did this to check:

    SELECT 'test' = 1
     WHERE EXISTS( SELECT * FROM mytable WHERE 1 = 0);
    
    SELECT 'test' = 1
     WHERE EXISTS( SELECT null);
    

    Sure enough, the first gives me an empty result set, while the second doesn’t.

    But why does MAX() return a row? I tried this with a simple query:

     SELECT MAX(i)
      FROM ( VALUES (1)) AS x(i)
      WHERE x.i = 2

    Which does return NULL. I did search and saw this explanation on SO, saying that the result of the MAX() for the group (where x.i=2) is undefined, hence the NULL. This is born out as you see here:

    CREATE TABLE mytable88(i INT);
    GO
    SELECT MAX(i) FROM dbo.mytable88 AS m;
    

    Strange. Certainly I wouldn’t have expected that from MAX(). I would have thought it was an empty set, but apparently that’s not the case.