更新查询中的EXEC

时间:2012-06-13 17:08:45

标签: sql subquery exec

我想从一个有两个字段的表中选择

标记标记查询 (名称)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

1 个答案:

答案 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,你需要一个循环并通过痛苦行来执行每一行。