I am writing SQL Server deployment scripts which create SQL Server job automatically on a specific SQL Server server/instance. I have found that I can extract the sql statement which can be used to create SQL Server job automatically by using script job as => Create To.
My confusion is that, I find the database name and Owner account name are hardcoded in the sql scripts generated. When I am using sqlcmd to execute the sql scripts on another computer to perform deployment, the database name and Owner account name may be different, so I need a way to pass the database name and Owner account name to the SQL Server job creation script and let the script use the provided database name and Owner account name (other than hard coded ones).
Any ideas how to do that?
Using the example from BrainD I'd like to point out that his idea of using variables is just fine, however, passing them to the stored procedures using dymanic SQL most certainly isn't the right approach. Rather, use the parameters of the stored procedures to directly pass the variables directly to where they are needed.
Futher to BrianD's answer above, you can define variables (actually more like preprocessor macros than variables) at the sqlcmd level; these are enclosed in parentheses with a leading $ sign:
This allows you to pass the information on the command line to sqlcmd with the -v switch:
You would need to dynamically create the job script and then execute it. You could try something like the following or change this to a stored proc with input parameters for the job owner and database name.
Hopefully this will get you going in the right direction. If you need more help let me know.
I was coming across the same problem today and how I tackle it is so simple Do the following
Create a stored proc that creates the job with parameter @serverName nvarchar(128)
Now easy, you can get the server name using the following
Execute the stored proc to create your job
That is it.
I am using visual studio db project and I did steps 2 and 3 int the postdeployment script
I even got it better ...Create a stored procedure without a parameter and inside of the stored proc do :
Then assign @servername to the server_name parameter of sp_add_jobserver as in below:
In order to create stored proc that creates a sql job, first create it using the sql management studio and then right click on the job and do Drop and Create....