我有以下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中所有这些行的所有字段。怎么做?
答案 0 :(得分: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 = 0
查找未通过一项或多项测试的行。
当您想要某些内容来描述失败的原因时,您可以添加另一列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 :(得分: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
答案 2 :(得分:1)
根据您正在进行的验证类型和结果集的预期大小,表上的索引和原始数据集的大小有几种可能有效的方法,最简单的是SELECT * into #tmp From TableName Where ...然后在#tmp上运行查询以删除不匹配的记录或只选择那些记录。没有更多细节,很难给出更具体的答案。
忘掉这部分。 为什么不
DELETE From Table where ISnumeric(PhoneNumber)=0
适当的where子句......
答案 3 :(得分:-1)
您是否期望在SP内部进行此类验证
创建proc SP_name
开始
选择 LEN(TD.Name)>的情况0然后“有效名称”否则“无效”结束, 当isnumeric(TD.phonenumber)= 0然后“有效”否则“无效”结束时的情况, 案例...... 从表
端