1

チェックサムは、プログラムでnullを返しています。また、クエリのみを実行しようとすると..私は得る

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Audit C recorded' to data type tinyint.

..これについて私を助けてもらえますか

SELECT CAST(ABS(CHECKSUM(Indicator)) % 450 AS TINYINT)   AS Indicator,
       CAST(CIndicator AS VARCHAR(100))                  AS CIndicator,
       CAST(SK_IndicatorL2 AS TINYINT)                   AS SK_IndicatorL2,
       CAST(ABS(CHECKSUM(IndicatorL2)) % 450 AS TINYINT) AS IndicatorL2
FROM   ( VALUES ('Alcohol',
       'Alcohol',
       'Audit C recorded',
       'Audit C recorded  (excluding screen in 3y prior to start of quarter)'),
                ('Alcohol',
       'Alcohol',
       'Community Detox and TH CAT',
       'Community Detox and TH CAT'),
                ('Alcohol',
       'Alcohol',
       'Follow Up appointment',
       'Follow Up appointment'),
                ('Healthy Lifestyles',
       'Healthy Lifestyles',
       'HealthyLifestyle-Aged 19-39',
       'HealthyLifestyle-Aged 19-39'),
                ('Healthy Lifestyles',
       'Healthy Lifestyles',
       'Aged 19-39 - BMI recorded',
       'Aged 19-39 - BMI recorded') ) AS Nis (Indicator, 
                                              CIndicator, 
                                              SK_IndicatorL2, 
                                              IndicatorL2)

私はこれをやってみました: SELECT CAST(ABS(CHECKSUM('Audit Crecorded')) % 250 as TinyInt) 適切な整数値を取得します。

4

3 に答える 3

0

彼女は、このクエリの ID と名前のメトリックを取得しようとしていると思います。私もデータ型エラーを取得しています.. CAST(ABS(CHECKSUM(Indicator)) % 450 as TinyInt) 私が間違っていなければID番号として

于 2013-10-25T09:24:54.030 に答える
0

あなたが何を望んでいるのか正確にはわかりませんが、これはうまくいきます。

最大 450 の値を持つ可能性があるため、からTINYINTに変更する必要があります。SMALLINT

編集: TINYINTが必要な場合は、% 256代わりに使用してください% 450

SELECT CAST(ABS(CHECKSUM(Indicator)) % 256 AS TINYINT)      AS Indicator,
       CAST(CIndicator AS VARCHAR(100))                     AS CIndicator,
       CAST(ABS(CHECKSUM(SK_IndicatorL2)) % 256 AS TINYINT) AS SK_IndicatorL2,
       CAST(ABS(CHECKSUM(IndicatorL2)) % 256 AS TINYINT)    AS IndicatorL2
FROM   ( VALUES ('Alcohol',
       'Alcohol',
       'Audit C recorded',
       'Audit C recorded  (excluding screen in 3y prior to start of quarter)'),
                ('Alcohol',
       'Alcohol',
       'Community Detox and TH CAT',
       'Community Detox and TH CAT'),
                ('Alcohol',
       'Alcohol',
       'Follow Up appointment',
       'Follow Up appointment'),
                ('Healthy Lifestyles',
       'Healthy Lifestyles',
       'HealthyLifestyle-Aged 19-39',
       'HealthyLifestyle-Aged 19-39'),
                ('Healthy Lifestyles',
       'Healthy Lifestyles',
       'Aged 19-39 - BMI recorded',
       'Aged 19-39 - BMI recorded') ) AS Nis (Indicator, 
                                              CIndicator, 
                                              SK_IndicatorL2, 
                                              IndicatorL2)

そして、それはこれを与えます:(使用時に値を更新するように編集% 256

Indicator CIndicator                                                                                           SK_IndicatorL2                                                                                       IndicatorL2
--------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- -----------
167       Alcohol                                                                                              Audit C recorded                                                                                     110
167       Alcohol                                                                                              Community Detox and TH CAT                                                                           17
167       Alcohol                                                                                              Follow Up appointment                                                                                83
187       Healthy Lifestyles                                                                                   HealthyLifestyle-Aged 19-39                                                                          143
187       Healthy Lifestyles                                                                                   Aged 19-39 - BMI recorded                                                                            32

更新: 本当に一意の文字列が必要な場合は、次のようにHASHBYTESを使用できます。

HASHBYTES('SHA', IndicatorL2) AS [HASHVAL]

しかし、 が必要な場合はTINYINT、提案されたソリューションの方がおそらく優れています。

于 2013-10-25T09:27:32.980 に答える