1

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

标记标记查询(名称) SELECT Name From table_employee where empid=1

结果我想要一张像

标记 标记结果(名称) Tom

所以我想执行我从选择中检索的查询并将其结果存储在我的表中而不是查询中

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
4

1 回答 1

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

于 2012-06-13T17:31:08.367 回答