1

2 つのフィールドを持つテーブルから選択したい

タグ タグ クエリ (名前) SELECT Name From table_employee where empid=1

その結果、次のようなテーブルが必要です

タグ タグ 結果 (名前) トム

だから私は選択から取得したクエリを実行し、その結果をクエリの代わりにテーブルに保存したい

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 に答える