2

これは私のSampleテーブルです

ここに画像の説明を入力

上の表では、次のように入力されるフィールドを評価しますNo Column Name

--Evaluates Expression
declare @ExpressionString varchar(max)
set @ExpressionString = 'Select ' + @ExpressionString 
Exec (@ExpressionString )

手順から出力を取得するまで、上記は正常に機能していましたが、これを行うことはできません:

Select (Select  [No Column Name]) from Sample

結果は次のようになると予想しました。

AI

私はこれで得ます:

exec ('select Left(''AI 0400'',2)')

どうすればこれを達成できますか?

これとともに:

Select (EXEC SP_EXECUTESQL Value) from Sample

サンプルからエラーが発生しています:

Incorrect syntax near the keyword 'EXEC'.
4

2 に答える 2

2

Sampleテーブル内のすべての式を評価し、結果を単一の結果セットとして返したいようです。

これを行う 1 つの方法は、テーブル全体をトラバースして、この種の動的クエリを作成することです。

SELECT Left('AI 0400',2) UNION ALL SELECT Right('0000' + 'AI 0400',4) UNION ALL ...

そして、結果のスクリプトを実行します。

この種のクエリを作成する際の問題は、基本的に、複数の行を単一の文字列値に連結するという問題に要約されます。これは、Stack Overflow でよく尋ねられる質問です。SQL Server でのその問題に対する最も一般的な解決策の 1 つは、FOR XMLクエリを使用することです。これを状況に適用する方法を次に示します。

DECLARE @sql nvarchar(max);

SET @sql =
  STUFF(
    (
      SELECT 'UNION ALL SELECT ' + Value + ' '
      FROM Sample
      FOR XML PATH (''), TYPE
    ).value('.', 'nvarchar(max)'),
    1, 10, ''  -- these are set to remove the initial 'UNION ALL '
  )
;

PRINT(@sql);  -- view the (first 4K chars of the) script before running
--EXECUTE (@sql);  -- uncomment if your inspection didn't reveal anything wrong
于 2013-08-19T13:23:29.000 に答える