May 19, 2003 at 10:52 am
I understand that:
declare @table table .....
declare @dynSql = 'select .....'
Then how to popluate @table with the dynsql?
Note, I want to avoid template table here.
Thanx.
May 19, 2003 at 12:35 pm
You can't. I'm pretty sure since I said that someone on here will figure out a way.
May 19, 2003 at 1:43 pm
You might try something like this:
declare @cmd varchar(8000)
set @cmd = 'declare @table table (l datetime)' + char(13) +
'insert into @table values (getdate())' + char(13) +
'select * from @table' + char(13)
exec(@cmd)
Gregory Larsen, DBA
If you looking for SQL Server Examples check out my website at http://www.geocities.com/sqlserverexamples
Gregory A. Larsen, MVP
May 19, 2003 at 1:46 pm
That will work just fine, but the variables scope is in the exec statment and it will go away as soon as it completes. You will not be able to query the table after the exec stmt.
May 19, 2003 at 4:10 pm
Yes, you are right, the proposed solution won't enable you to access the @table.
Looks like I still have to use Temporary table in order to access the result of a dynamic sql?
quote:
That will work just fine, but the variables scope is in the exec statment and it will go away as soon as it completes. You will not be able to query the table after the exec stmt.
May 19, 2003 at 4:16 pm
Yes, if the dynamic sql is set based then you will need to put it into a temp table to be able to work with the data. If all you want back is a single variable, you can use an ouput parameter if you pass your dynamic sql into sp_executesql
May 19, 2003 at 4:21 pm
I hate Temporary table, because it caused a lot of problems, besides performance problems.
Maybe I should avoid Dynamic SQL. But sometimes, it's a pain without using a Dynmic SQL, especially when dealing with query hoc reports.
May 20, 2003 at 3:27 pm
If that's what you really want to do (ie. I'm not sure I would want to go this far ), but you might be able to achieve this with XML.
I just had a problem where I wanted to pass an array of values (really a recordset) into a stored procedure. But as we all know, arrays aren't SQL's strong suit. What I did was pass in a pretty simple XML string, use sp_xml_preparedocument to prepare it, and then load it into a table variable.
Here's the code snippet:
CREATE PROCEDURE spName
@RoomXML varchar(500)
AS
DECLARE @RoomTypeTable table
(
RoomTypeID int PRIMARY KEY,
RoomQty int
)
DECLARE @DocHandle int
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @RoomXML
--Load up the @RoomTypeTable table variable
INSERT INTO @RoomTypeTable
(RoomTypeID, RoomQty)
SELECT *
FROM OPENXML(@DocHandle, 'Root/RoomType', 1)
WITH (RTID int, Qty int)
Here's a sample of the XML string:
<Root>
<RoomType RTID="2" Qty="2"/>
<RoomType RTID="4" Qty="1"/>
</Root>
So what you could do, is create a stored procedure that accepts and executes your dynamic sql, and returns it as an XML string, which you then load into your table variable. Kind of long winded, but I imagine it would work.
It's actually kind of amusing, as up to a couple of days ago I struggled to see why I would use XML, and was quite dismissive of it all, but it's turned out to be really useful.
Cheers,
Tim Elley
Viewing 8 posts - 1 through 7 (of 7 total)
You must be logged in to reply to this topic. Login to reply