I need to use exec
inside of select
clause. The query for the exec is created according to the columns of the table to on which select clause if used. What i want to do is something like following:
SELECT distinct
MTMain.[TableName],
MTMain.[TableFKey],
(select IsActive (exec GetStringForIsActive MTMain.[TableName],MTMain.[TableFKey]))
FROM
[MasterTableForLanguage] MTMain
Here, GetStringForIsActive
is the stored procedure I want to execute for every row selected from MasterTableForLanguage
.
The stored procedure
will use EXEC
to execute the following string
select IsActive from [TableName] where PKID= cast([TableFKey] as int)
TableName and TableFKey will be inputs of the stored procedure.
It's not EXEC'ing that statement, simply performing a select. I have several stored procs I use daily in some SQL agent processes, they all perform selects to query various tables, and none of them call an EXEC to perform those actions. This is my own example:
SELECT is not possible with EXEC, You will have to get the EXEC output to a temp table or table variable and fetch the output from there Prior to sql 2012 SELECT is not possible. you need to get the result into a table (can be #table or tbl variable). But in 2012 you can do this..
In this article, we will review on EXEC SQL statement in SQL Server and explore a few examples. The EXEC command is used to execute a stored procedure, or a SQL string passed to it. You can also use full command EXECUTE which is the same as EXEC.
Well, I think to answer the full question, I don't believe a stored procedure would EXEC a SELECT statement, it would simply perform the SELECT. You EXEC your current proc and pass it vars, and it returns a value BASED ON the select statement it runs. It's not EXEC'ing that statement, simply performing a select.
If you can modify your Stored Procedure GetStringForIsActive to return TableName, TableFKey and IsActive, you can use a cursor to get execute it for each row and add the results to a temp table.
ie:
exec GetStringForIsActive 'TableName', 'TableFKey'
returns
select [TableName], [TableFKey], IsActive from [TableName] where PKID= cast([TableFKey] as int)
The code would be like this:
declare @TableName nvarchar(50)
declare @TableFKey nvarchar(50)
declare @Results table (TableName nvarchar(50), TableFKey nvarchar(50), IsActive bit)
declare TableCursor cursor fast_forward for
select TableName, TableFKey from MasterTableForLanguage
open TableCursor
fetch next from TableCursor into @TableName, @TableFKey
if @@FETCH_STATUS <> -1
print 'MasterTableForLanguage check'
while (@@FETCH_STATUS <> -1)
begin
insert into @Results
exec GetStringForIsActive @TableName, @TableFKey
fetch next from TableCursor into @TableName, @TableFKey
end
close TaleCursor
deallocate TableCursor
select * from @Results
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With