2017-01-20 8 views
0

私はテーブルを持っている:selectクエリでパラメータを使用するにはどうすればよいですか?

テーブル名:私はtbl_Incomeからデータをフェッチしたいtbl_Income

EmployeeID  Element  FinancialYear Jan Feb Mar 

00402060   Basic   2016-2017  100 200 300 
00402060   HRA   2016-2017  100 200 300 
00402060   DA   2016-2017  100 200 300 

私は以下の問題を取ります。

私は出力

OUTPUT : 

    Jan 
1 100  

以下に私を助けてくださいしたい

Declare @Month varchar(10) = 'Jan' 

select @Month from tbl_Income where EmployeeID = '00402060' and Element = 'Basic' and FinancialYear = '2016-2017' 

...

+0

これは動的SQLで行う必要があります。これは非常に良いデータベース設計ではありません。 – HoneyBadger

+0

これを実現するには、case文を使用できます。 – TechEnthusiast

答えて

2

あなたはこのような動的SQLを使用することができます。

declare @sql nvarchar(max) 
Declare @Month varchar(10) = 'Jan' 
declare @income int 

set @sql = 'select @inc=' + @Month + ' from tbl_Income where EmployeeID = ''00402060'' and Element = ''Basic'' and FinancialYear = ''2016-2017''' 

exec sp_executesql @sql, N'@inc int OUTPUT', @[email protected] OUTPUT 
select @income as income 

は、これが開いていることけれども注意してくださいSQLインジェクション攻撃。

あなたのデザインを修正する方がよいでしょう。

+0

この出力 '100'の値を変数に保存する方法は?私を助けてください.. @ GurV –

+0

私は1つのvaribleにその値を格納して私の答えをチェックすることができます.. @ DhavalPurohit – Chanukya

+0

@チャヌクヤ - あなたの答えはまさに私と同じです。Dhaval - これを見てください(http://stackoverflow.com/questions/3840730/getting-result-of-dynamic-sql-into-a-variable-for-sql-server) – GurV

1
Declare @Month varchar(10) = 'Jan' 
declare @v nvarchar(max) 
declare @v1 INT 
set @v =CONCAT('select @v1=' ,@month, ' from 
table_a where EmployeeID = ''00402060'' and Element = ''Basic'' and FinancialYear = ''2016-2017''') 
PRINT @V 
EXECUTE sp_executesql @v,N'@V1 INT OUTPUT', @[email protected] OUTPUT; 
SELECT @V1; 
0

[サンプルデータベース設計] [1]

[1]:https://i.stack.imgur.com/2vxEb.png - テーブル "dbo.Month"

CREATE TABLE dbo.Month (
    Id int NOT NULL, 
    Name nvarchar(50) NOT NULL, 
    CONSTRAINT PK_Month PRIMARY KEY CLUSTERED (Id) 
) 

- テーブルIncomeType」

CREATE TABLE dbo.IncomeType (
    Id int NOT NULL, 
    Name nvarchar(50) NOT NULL, 
    CONSTRAINT PK_IncomeType PRIMARY KEY CLUSTERED (Id) 
) 

- 表 "FinancialYear"

CREATE TABLE dbo.FinancialYear (
    Id int NOT NULL, 
    YearSpan nvarchar(50) NOT NULL, 
    CONSTRAINT PK_FinancialYear PRIMARY KEY CLUSTERED (Id) 
) 

- テーブル "従業員"

CREATE TABLE dbo.Employee (
    Id int NOT NULL, 
    Name nvarchar(50) NOT NULL, 
    CONSTRAINT PK_Employee PRIMARY KEY CLUSTERED (Id) 
) 

- 表 "所得"

CREATE TABLE dbo.Income (
    Id int NOT NULL, 
    EmployeeId int NOT NULL, 
    TypeId int NOT NULL, 
    YearSpanId int NOT NULL, 
    MonthId int NOT NULL, 
    CONSTRAINT PK_Income PRIMARY KEY CLUSTERED (Id) 
) 

--Alter各表

ALTER TABLE Income 
    ADD CONSTRAINT FK_Income_Employee FOREIGN KEY (EmployeeId) REFERENCES Employee (Id) 

    ALTER TABLE dbo.Income 
    ADD CONSTRAINT FK_Income_FinancialYear FOREIGN KEY (YearSpanId) REFERENCES dbo.FinancialYear (Id) 


    ALTER TABLE dbo.Income 
    ADD CONSTRAINT FK_Income_IncomeType FOREIGN KEY (TypeId) REFERENCES dbo.IncomeType (Id) 

    ALTER TABLE dbo.Income 
    ADD CONSTRAINT FK_Income_Month FOREIGN KEY (MonthId) REFERENCES dbo.Month (Id) 
    外部キー参照を追加します
  1. eeIDは今、単純結合あなたを助けることができるヶ月テーブルからMonthId
  2. 会計年度のテーブル要素が所得タイプテーブルから来る
  3. FinancialYear --from
  4. Employeeテーブルから

来ます外部キー参照を使用して各値を取得してください

関連する問題