日期:2014-05-18 浏览次数:20509 次
declare @pTFNUpdateXml xml
declare @tfnCriteriaElements xml
declare @TollFreeNumberRegionID int,
@TollFreeNumberCountryID int
set @pTFNUpdateXml = '
<BulkEditQuery>
<Criteria Field="TFNRegionID" Value="1" IsNull="False" />
<Criteria Field="TFNCountryID" Value="4" IsNull="False" />
<Criteria Field="TFNCarrierID" Value="1" IsNull="False" />
<Criteria Field="TFNCarrierAccount" Value="92888359" IsNull="False" />
<Criteria Field="TFNCarrierStartDate" Value="1/1/2011" IsNull="False" />
<Criteria Field="TFNCarrierEndDate" Value="1/1/2012" IsNull="False" />
<Criteria Field="TFNTypeID" Value="3" IsNull="False" />
<Criteria Field="TFNActiveBool" Value="1" IsNull="False" />
</BulkEditQuery>'
set @tfnCriteriaElements = @pTFNUpdateXml.query('/BulkEditQuery/Criteria')
select @pTFNUpdateXml
select @tfnCriteriaElements
declare @UpdateColumns table
(ColID int not null identity(1,1) primary key,
ColName nvarchar(128),
ColNameAlias nvarchar(128))
insert @UpdateColumns (ColName,ColNameAlias)
select 'TollFreeNumberRegionID','TFNRegionID' union all
select 'TollFreeNumberCountryID','TFNCountryID' union all
select 'TollFreeNumberCarrierID','TFNCarrierID' union all
select 'CarrierAccountNumber','TFNCarrierAccount' union all
select 'StartDate','TFNCarrierStartDate' union all
select 'EndDate','TFNCarrierEndDate' union all
select 'TollFreeNumberTypeID','TFNTypeID' union all
select 'ActiveBool','TFNActiveBool'
select * from @UpdateColumns
declare @UpdateColumntable table
(UpdateColID int not null identity(1,1) primary key,
ColName nvarchar(128) not null,
ColNameAlias nvarchar(100)not null,
DataType nvarchar(32) not null,
DataTypeDf nvarchar(64) not null,
Nullable bit not null
)
insert @UpdateColumntable(ColName,ColNameAlias,DataType,DataTypeDf,Nullable)
select ColName,ColNameAlias,DATA_TYPE,
case when DATA_TYPE in ('varchar','nvarchar') then DATA_TYPE + '('+ cast(character_maximum_length as nvarchar(8)) + ')'
when DATA_TYPE in ('bit','int','datetime','smalldatetime') then DATA_TYPE end as DataTypeDf,
case when IS_NULLABLE = 'NO' then 0 when IS_NULLABLE = 'YES' then 1 end as Nullable
from INFORMATION_SCHEMA.COLUMNS ISC join @UpdateColumns UC on ISC.Column_Name = UC.ColName
where table_name = 'TollFreeNumber'
select * from @UpdateColumntable
declare @sql nvarchar(max)
set @sql = ''
select top 1 @sql = 'set ' + '@' + ColName + ' = case when ' + '@tfnCriteriaElements.value(''' + '((/Criteria[@Field="' + ColNameAlias + '"])[1]/@Value)' + ''',''' + DataTypeDf + ''') = 0 then NULL
else @tfnCriteriaElements.value(''' + '((/Criteria[@Field="' + ColNameAlias + '"])[1]/@Value)' + ''',''' + DataTypeDf + ''') end'
from @UpdateColumntable
print @sql
select top 1 @sql = 'select ' + '@' + ColName + ' = case when ' + '@tfnCriteriaElements.value(''' + '((/Criteria[@Field="' + ColNameAlias + '"])[1]/@Value)' + ''',''' + DataTypeDf + ''') = 0 then NULL
else @tfnCriteriaElements.value(''' + '((/Criteria[@Field="' + ColNameAlias + '"])[1]/@Value)' + ''',''' + DataTypeDf + ''') end'
from @UpdateColumntable
print @sql
exec(@