我想从一个有两个字段的表中选择
标记标记查询 (名称)SELECT name来自table_employee,其中empid = 1
因此我想要一张像
这样的表格标记标记结果 (姓名)汤姆
所以我想执行从select中检索的查询并将其结果存储在我的表中而不是查询
Update #TempTagQueries
SET TagQuery = CAST(#Temp2.EmailTagQuery AS varchar(MAX))
FROM #TempTagQueries AS #Temp1
INNER JOIN
(SELECT EmailTagQuery,EmailTagIdentifier FROM tblEmailTag) AS #Temp2
ON #Temp1.TagValue = #Temp2.EmailTagIdentifier
SELECT * FROM #TempTagQueries
如果能够做到这一点,请帮助我,如果不能解决问题的话。因为我正在避免光标这样做。
Update #TempTagQueries
SET TagQuery = EXEC( CAST(#Temp2.EmailTagQuery AS varchar(MAX)))
FROM #TempTagQueries AS #Temp1
INNER JOIN
(SELECT EmailTagQuery,EmailTagIdentifier FROM tblEmailTag) AS #Temp2
ON #Temp1.TagValue = #Temp2.EmailTagIdentifier
SELECT * FROM #TempTagQueries
答案 0 :(得分:0)
如果不确切地知道你正在尝试做什么,很难提供具体的答案。简短的回答是没有办法在不使用循环的情况下执行存储在表中的批量动态sql,以便迭代地执行每个动态sql块。
但是最接近你的情景,我认为有效,可能是这样的。
CREATE TABLE input (
operator VARCHAR(1),
value1 INT,
value2 INT
)
INSERT INTO input SELECT '+', 2, 3
INSERT INTO input SELECT '*', 2, 3
GO
CREATE FUNCTION operation (@operator VARCHAR(1), value1 INT, value2 INT)
RETURNS TABLE
AS
RETURN
SELECT @value1 * @value2 AS result WHERE @operator = '*'
UNION ALL SELECT @value1 + @value2 AS result WHERE @operator = '+'
GO
SELECT
input.operator,
input.value1,
input.value2,
operation.result
FROM
input
CROSS APPLY
dbo.operation(input.operator, input.value1, input.value2) AS operation
这样,函数的结果取决于存储在另一个表中的参数。但是您需要能够将实际逻辑预编码到您的函数中,并能够对其进行参数化以使其通用。
如果你真的需要执行未知的动态sql,你需要一个循环并通过痛苦行来执行每一行。