Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 195
  • Last Modified:

Need to accept a Workstation list using SQL SP w/ Parameter

I need to setup a new SQL Stored Procedure to use a Parameter (call it @Endpoints) to accept a list of workstation machines from another Devloper who hasn't told me how he will pass the workstation names to me.
He said he'll send the workstation names to me and said to setup a SQL SP that accepts machines as a parameter. Below is some code I use currently. It appears the only thing that will probably need to be updated is the usp_GetNodes Stored Procedure. Below is the C# Code and below that is the SP. How can I setup the SP to receive a list of workstations that I don't know how they' ll be sent?
Thanks Experts,
Wally
------------------- C# CODE ------------------------------------------------------------------
public string nodeToPing;
        public string NodeToPing
        {
            get { return nodeToPing; }
            set { nodeToPing = value; }
        }
 
        static void Main(string[] args)
        {
 
            // Do Database Query Here.....
            // This will hold the entire workstation 
            // list that is pulled from the Nodes table
            List<Program> nodeList = new List<Program>();
 
            SqlConnection conn = new SqlConnection(SettingsManager.ConnectionString);
            try
            {
                conn.Open();
                Console.WriteLine("DB Connection has been opened\n");
            }
            catch
            {
                Console.WriteLine("Database connection failed");
                return;
            }
 
            SqlCommand recCount = new SqlCommand("SELECT Count(*) FROM Nodes", conn);
            UInt32 totalRows = Convert.ToUInt32(recCount.ExecuteScalar());
            SqlCommand sqlCmd = new SqlCommand("usp_GetNodes", conn);
            sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
            SqlDataReader reader = null;
            reader = sqlCmd.ExecuteReader();
 
            Console.WriteLine(String.Format("There are {0} records in the database.", totalRows));
            // Store server data into a collection
            if (reader.HasRows)
            {
                //int currentRow = 0;
                while (reader.Read())
                {
                    Program node = new Program();
                    node.NodeToPing = reader.GetString(0);
                    nodeList.Add(node);
                    Console.WriteLine(node.NodeToPing);
                    //currentRow++;
                    //Console.WriteLine(String.Format("{0}% Complete", currentRow * 100 / totalRows));
                }
 
                reader.Close();
 
------------------------- STORED PROCEDURE -----------------------------------------------
USE [DMS]
GO
/****** Object:  StoredProcedure [dbo].[usp_GetNodes]    Script Date: 03/31/2009 09:59:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
ALTER PROCEDURE [dbo].[usp_GetNodes]
	-- variables
	-- @Endpoints varchar(75) = '%'
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	-- SELECT n.Name FROM Nodes n WHERE n.Name LIKE @Endpoints
	SELECT Name FROM Nodes
END

Open in new window

0
wally_davis
Asked:
wally_davis
  • 3
  • 2
1 Solution
 
reb73Commented:
Is the list of workstations gonna be based on a pattern match or an exact match?

Exact matches can be handled by using just a single parameter declared as varchar(8000) using dynamic SQL as long as individual machine names are separated by commas (CSV string)

Pattern Matches can be slightly tricky as it is likely that you will need a UDF to parse individual items in the string to a table and then use the like operator to join on this dynamic table..

0
 
wally_davisAuthor Commented:
an exact match.
0
 
wally_davisAuthor Commented:
FYI, I've never used Dynamic SQL. Where's a good resource to learn it and do you have any examples?
0
 
reb73Commented:
Try the adapted stored procedure below -

You will have to pass in workstation names in a csv list. The script below uses a variable to build the SQL statement including wrapping the contents in single quotes and uses the IN keyword to match the list..
ALTER PROCEDURE [dbo].[usp_GetNodes]
         @Endpoints varchar(8000) = NULL   -- Pass comma separated values here like 'WorkStation1,WorkStation2'
AS
BEGIN
        SET NOCOUNT ON
	DECLARE @SQL varchar(8000)
	SET @SQL = 'SELECT [Name] FROM Nodes WHERE [Name] IN (''' + REPLACE(@EndPoints,',',''',''') + ''')'
        EXEC	(@SQL)
END
GO

Open in new window

0
 
wally_davisAuthor Commented:
Thanks Reb73 for your help and the walk-through. This is a great start for what I need to do. :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

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.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now