1

私のプロジェクトの 1 つで次の手順を使用しています。

create procedure [dbo].[SMSStudentSelect2]
@Sorp char(20)
as
begin
   select @Sorp PhoneNo from Students 
   where DATALENGTH(@Sorp) = 11 and ClassId = 1 
   and GRNo not in(select GRNo from Discharge)
end

私の問題は次SPhoneNoのとおりです。パラメーター@Sorpを入力すると結果が得られませんが、直接使用SPhoneNoすると、次のようなクエリを使用します

select SPhoneNo from Students where DATALENGTH(SPhoneNo) = ......... 

私の手順では、私は望ましい結果を得る

誰でも私の問題を解決できますか????

4

4 に答える 4

3

OPが何を望んでいるかを判断するために、コメントに基づいて編集します。

このようなことを試してください:

create procedure [dbo].[SMSStudentSelect2]
@Sorp char(1) --"S" returns the SPhoneNo, "P" returns the PPhoneNo
as
begin
   select
       CASE
           WHEN @Sorp='S' THEN SPhoneNo 
           ELSE PPhoneNo 
       END AS PhoneNo
       from Students 
       where DATALENGTH(@Sorp) = 11 and ClassId = 1 
           and GRNo not in(select GRNo from Discharge)
end

「S」または「P」を渡して、必要な列を取得します。

于 2012-04-23T12:28:11.280 に答える
0

このストアド プロシージャを記述して、動的 SQL を使用できます。

create procedure [dbo].[SMSStudentSelect2] @Sorp char(20) as begin

DECLARE @SQL AS nvarchar(max) =

'select ' + @Sorp + ' AS PhoneNo from Students where ' + LENGTH(@Sorp) + ' = 11 and ClassId = 1 and GRNo not in(Discharge から GRNo を選択)'

EXEC(@sql)

終わり

これは最速のコードではありませんが、期待どおりの結果が返されます。

于 2012-04-23T20:07:56.067 に答える
0

ここに = 記号がありませんか?

select @Sorp = PhoneNo
于 2012-04-23T12:22:28.490 に答える
0

ありがとうございます。Mikael Eriksson が提案したように、データ長のケースも使用しました。そして私の問題は次のように解決されます

alter procedure [dbo].[SMSStudentSelect2]
@Sorp char(1) --"S" returns the SPhoneNo, "P" returns the PPhoneNo
as
begin
   select
       CASE
           WHEN @Sorp='S' THEN SPhoneNo 
           ELSE PPhoneNo 
       END AS PhoneNo
       from Students 
       where DATALENGTH(case when @Sorp = 'S' then SPhoneNo else PPhoneNo end)= 11 and ClassId = 1 
           and GRNo not in(select GRNo from Discharge)
end
GO

回答が受け入れられたときに報われる唯一の評判を報いることができて申し訳ありません

于 2012-04-23T15:55:23.197 に答える