我正在使用动态sql
即
DECLARE @searchstring VARCHAR(500)
DECLARE @str VARCHAR(MAX)
SELECT @str = 'SELECT * FROM Table1 WHERE ' + @searchstring
EXECUTE @str
我需要的是我想从动态sql上面选择一个列值来传递不同的SP
假设我需要ID列值并将其传递给另一个名为GetAnotherData @Ids的sp。我怎么能这样做?
答案 0 :(得分:5)
你可以使用Alexander Fedorenko的例子,但是如果你不想创建任何临时表,你可以使用输出xml参数传递你的id:
declare @stmt nvarchar(max), @Data xml, @searchstring nvarchar(max)
select @stmt = '
select @Data = (
select id
from Table1
where ' + @searchstring + '
for xml raw(''Data'')
)
'
exec sp_executesql
@stmt = @stmt,
@params = N'@Data xml output',
@Data = @Data output
select
T.C.value('@id', 'int') as id
from @Data.nodes('Data') as T(C)
<强> sql fiddle demo 强>
答案 1 :(得分:0)
以下示例创建一个具有一个Id列的用户定义表类型。此外,INSERT @RetIds EXEC(@STR)
语句填充参数列表,然后将值传递给存储过程
CREATE TYPE RetIds AS TABLE
(
Id int
)
DECLARE @searchstring varchar(500) = 'AND SearchCol = 1'
DECLARE @str varchar(max)
SELECT @str ='SELECT Id FROM dbo.test6 WHERE 1 = 1 ' + @searchstring
DECLARE @RetIds AS RetIds
INSERT @RetIds
EXEC(@str)
EXEC dbo.ExecIds @RetIds
请参阅SQLFiddle