1

このテーブルのユーザーがあります。選択した結果をパラメーターで並べ替える必要がありますが、userNameフィールドなどのvarcharフィールドを並べ替えると問題が発生します。これはどのように解決できますか?

----------------------------------------
| userID | UserName | password |...... |
----------------------------------------
| int    | varchar  | varcahr  | ..... |

    declare @index varchar(100)
    set @index = 2
    select * From users
    order by case @index 
                            when 1 then Number
                            when 2 then CAST(LoginName AS INT)
                            Else Password
                End
4

3 に答える 3

3

数値を文字にキャストします。文字を数値にキャストしません。

case @index
      WHEN 1 THEN RIGHT('0000000000'+ CAST(UserId AS VARCHAR(10)), 10)
      WHEN 2 THEN UserName -- or LoginName, maybe a typo ?
      ELSE Password
      end
于 2012-09-04T11:04:14.310 に答える
0

ほとんどのvarcharをintにキャストできないため、varcharで並べ替える必要があります

次のようにフォーマットしorder byます

      case @index
      when 1 then RIGHT('000000'+ CONVERT(Varchar(6), UserID)
      when 2 then LoginName
      end
于 2012-09-04T11:04:05.480 に答える
0
declare @pSORT_PARAM VARCHAR(400) -- HERE YOU HAVE TO PASS COLUMN NAME AS PARAMETER

DECLARE @pSORT_ORDER VARCHAR(10) -- HERE YOU HAVE TO PASS SORT ORDER AS ASC OR DESC

DECLARE @pQUERY VARCHAR(400)

SET @pSORT_ORDER=' ASC '

SET @pQUERY='SELECT * FROM USERS'

set @pQUERY =@pQUERY + ISNULL(' ORDER BY '+ @pSORT_PARAM + @pSORT_ORDER,'')

EXEC SP_EXECUTESQL @pQUERY
于 2012-09-04T12:48:50.867 に答える