Solved

how can I store my select statement in a variable?

Posted on 2008-10-17
2
459 Views
Last Modified: 2012-05-05
Hello,
Platform MS SQL 2005
I have a stored proc that recieves an xml string builds a temp table and performs an inner join. It works fine. But I want to also send a regular string variable that contains the fields for the select statement. After searching around it seems I can' t do this the way I want, but is there a way to put this into an exec or something so I cna make this work?



create PROCEDURE [dbo].[sp_BattleRoster_SelDataExtract_xmlinput](@upclist xml, @selectstring varchar(max)) AS
DECLARE @units TABLE (ID varchar(20)) 
INSERT INTO @units (ID) SELECT ParamValues.ID.value('.','VARCHAR(20)')
FROM @upclist.nodes('//upc') as ParamValues(ID) 
SELECT   @selectstring   FROM [urodata].[dbo].[vw_BattleRosterDataExtract]
INNER JOIN     @units u
ON    [vw_BattleRosterDataExtract] .upc = u.ID

Open in new window

0
Comment
Question by:Dustin Hopkins
2 Comments
 
LVL 16

Accepted Solution

by:
brad2575 earned 500 total points
ID: 22744184
Yea do this

EXEC('
INSERT INTO ' + @units  + '(ID) SELECT ' + @SelectFields + '
FROM ' + @upclist + nodes('//upc') + ' as ParamValues(ID)
SELECT  ' +  @selectstring   ' + FROM [urodata].[dbo].[vw_BattleRosterDataExtract]
INNER JOIN     ' + @units + ' u
ON    [vw_BattleRosterDataExtract] .upc = u.ID
')

I am not familar with the XML coding so you may need to adjust the above a bit but you just create a string inside the EXEC statement with quotes around it and then use the "+" anywhere you want to join a variable (like above).  If you want to use a single quote INSIDE the statement then you would use two single quotes (escape characters).



0
 
LVL 14

Author Comment

by:Dustin Hopkins
ID: 22887304
Alright, sorry for the delay, I've been rather busy. I had to do some more research in order to properly incorporate the xml variables and such. Thanks brad for puting me on the right path. Here is the final code.
create PROCEDURE [dbo].[sp_BattleRoster_SelDataExtract_xmlinput]
(@upclist xml, @selectstring varchar(max)) 
AS
DECLARE @SQLStatement varchar(max)
create table #units (ID varchar(20)) 
 
INSERT INTO #units(ID) SELECT  ParamValues.ID.value('.','VARCHAR(20)')
FROM @upclist.nodes('//upc') as ParamValues(ID) 
select @SQLStatement = 'SELECT ' + @selectstring + 
' FROM [urodata].[dbo].[vw_BattleRosterDataExtract]' +
' INNER JOIN #units u ' +
'ON    [vw_BattleRosterDataExtract].upc = u.ID'
--Execute Statement
exec(@SQLStatement)
drop table #units

Open in new window

0

Featured Post

VMware Disaster Recovery and Data Protection

In this expert guide, you’ll learn about the components of a Modern Data Center. You will use cases for the value-added capabilities of Veeam®, including combining backup and replication for VMware disaster recovery and using replication for data center migration.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Insert statement is inserting duplicate records 15 61
PERFORMANCE OF SQL QUERY 13 73
Pivot Query Problem 9 42
SQL query with cast 38 43
by Mark Wills PIVOT is a great facility and solves many an EAV (Entity - Attribute - Value) type transformation where we need the information held as data within a column to become columns in their own right. Now, in some cases that is relatively…
In SQL Server, when rows are selected from a table, does it retrieve data in the order in which it is inserted?  Many believe this is the case. Let us try to examine for ourselves with an example. To get started, use the following script, wh…
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

810 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