0

私は次のSQLを持っています、

  SELECT TD.MyTempTableID
        ,TD.ID
        ,TD.Name
        ,TD.PhoneNumber
        ,TD.Featured
        ,TD.Price
        ,TD.Available
        ,TD.ModelNumber
        ,TD.Searchable
        ,TD.Brand
        ,TD.Tags
        ,TD.ShortDescriptions
        ,TD.Variations
        ,TD.Promotion
        ,TD.Archive
        ,TD.UPC
        ,TD.Status
FROM    MyTempTable YD
WHERE   TD.Brand = @Brand

ここで、SP のこれらすべての行のすべてのフィールドを検証する必要があります。これを行う方法?

4

4 に答える 4

2

一時テーブルに列を追加しますIsValid BIT DEFAULT(1)

次に、列ごとに各検証ルーチンを実行します。

UPDATE MyTempTable
SET IsValid = 0
WHERE IsNumeric(PhoneNumber) = 0
-- don't process rows that have already failed
AND IsValid = 1

各列に対して上記を繰り返し、WHERE 句をその値が無効になるものに置き換えます。

完了したらWHERE IsValid = 1、検証に合格した行、またはWHERE IsValid = 01 つ以上のテストに失敗した行を取得するためにクエリを実行できます。

失敗した理由を説明したい場合は、別の列を追加できますErrorReason VARCHAR(MAX) DEFAULT('')

UPDATE MyTempTable
SET IsValid = 0,
    -- note I'm forcing a line-break here inside the string so each reason is on a new line
    ErrorReason += 'PhoneNumber must be numeric
' 
WHERE IsNumeric(PhoneNumber) = 0

この場合AND IsValid = 1、失敗の複数の理由を取得する必要があるため、条件を含めていないことに注意してください。失敗の最初の理由だけが必要な場合は、自由に追加してください。

完了したら、 の行にIsValid = 0も 1 つ以上の理由があります。

于 2013-09-12T01:55:18.893 に答える
1
Declare @ID as varchar(500)
Declare @Name as varchar(30)
Declare @MOBILE as varchar(20)
 --AND OTHER vARUIABLE FOR oTHER FIELDS
Declare MY_data CURSOR FOR

 SELECT TD.MyTempTableID
        ,TD.ID
        ,TD.Name
        ,TD.PhoneNumber
        ,TD.Featured
        ,TD.Price
        ,TD.Available
        ,TD.ModelNumber
        ,TD.Searchable
        ,TD.Brand
        ,TD.Tags
        ,TD.ShortDescriptions
        ,TD.Variations
        ,TD.Promotion
        ,TD.Archive
        ,TD.UPC
        ,TD.Status
FROM    MyTempTable YD
WHERE   TD.Brand = @Brand

OPEN MY_data
    FETCH NEXT FROM MY_data INTO @ID, @Name ,@MOBILE -- All other Declared vARIABLE FOR EACH COLUMNS EACH SEPERATE BY ','
        WHILE @@FETCH_STATUS = 0
        BEGIN
 --Here you can validate data for each row since each row value is stored in vaariables above like
if( ! IsNumeric(@Mobile))
Delete From TableName where Id=@Id

        END
    CLOSE MY_data
DEALLOCATE MY_data
于 2013-09-11T12:23:43.820 に答える
-1

SP内でこのタイプの検証を期待していますか

プロセス SP_name を作成します

始める

Select Case when LEN(TD.Name) > 0 then “有効な名前” else “Invalid” end, Case when isnumeric(TD.phonenumber) = 0 then “valid” else “Invalid” end, Case when …… 表より

終わり

于 2013-09-14T19:06:44.740 に答える