ビュー内で変数を宣言することは可能ですか? 例えば:
Declare @SomeVar varchar(8) = 'something'
構文エラーが表示されます:
キーワード「Declare」付近の構文が正しくありません。
あなたは正しいです。VIEW ではローカル変数は使用できません。
結果セットを返すテーブル値関数でローカル変数を設定できます (ビューのように)。
http://msdn.microsoft.com/en-us/library/ms191165.aspx
例えば
CREATE FUNCTION dbo.udf_foo()
RETURNS @ret TABLE (col INT)
AS
BEGIN
DECLARE @myvar INT;
SELECT @myvar = 1;
INSERT INTO @ret SELECT @myvar;
RETURN;
END;
GO
SELECT * FROM dbo.udf_foo();
GO
WITH を使用して式を定義できます。次に、単純な Sub-SELECT を実行して、それらの定義にアクセスします。
CREATE VIEW MyView
AS
WITH MyVars (SomeVar, Var2)
AS (
SELECT
'something' AS 'SomeVar',
123 AS 'Var2'
)
SELECT *
FROM MyTable
WHERE x = (SELECT SomeVar FROM MyVars)
spencer7593 が述べたように関数を使用することは、動的データに対する正しいアプローチです。静的データの場合、(sprocs で大規模な手続き型コードを記述するアンチパターンとは対照的に) SQL データ設計と一致する、よりパフォーマンスの高いアプローチは、静的値を持つ別のテーブルを作成し、それに結合することです。これは、SQL エンジンが JOIN を中心に効果的な実行計画を構築できるため、パフォーマンスの観点から非常に有益であり、必要に応じてインデックスを追加することもできます。
関数 (または任意のインライン計算値) を使用することの欠点は、返される可能性のあるすべての行に対してコールアウトが発生することであり、これにはコストがかかります。なんで?SQL は、最初に計算された値で完全なデータセットを作成し、次にそのデータセットに WHERE 句を適用する必要があるためです。
10 回のうち 9 回は、クエリで動的に計算されたセル値を必要としないはずです。必要なものを把握し、それをサポートするデータ モデルを設計し、そのデータ モデルに(たとえばバッチ ジョブを介して)半動的データを入力し、SQL エンジンを使用して標準 SQL を介して手間のかかる作業を行う方がはるかに優れています。 .
はい、これは正しいです。ビューに変数を含めることはできません (他の制限もあります)。
ビューは、結果を select ステートメントで置き換えることができる場合に使用できます。
私がしていることは、テーブル変数と同じ選択を実行するビューを作成し、そのビューを 2 番目のビューにリンクすることです。したがって、ビューは別のビューから選択できます。これは同じ結果を達成します