首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于执行一段带有变量的sql语句有关问题

2012-02-10 
关于执行一段带有变量的sql语句问题请教一下,以下代码SQL codedeclare @pTFNUpdateXml xmldeclare @tfnCri

关于执行一段带有变量的sql语句问题
请教一下,以下代码

SQL code
declare @pTFNUpdateXml xmldeclare @tfnCriteriaElements xmldeclare @TollFreeNumberRegionID int,        @TollFreeNumberCountryID intset  @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 @pTFNUpdateXmlselect @tfnCriteriaElementsdeclare @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 allselect 'TollFreeNumberCountryID','TFNCountryID' union allselect 'TollFreeNumberCarrierID','TFNCarrierID' union allselect 'CarrierAccountNumber','TFNCarrierAccount' union allselect 'StartDate','TFNCarrierStartDate' union allselect 'EndDate','TFNCarrierEndDate' union allselect 'TollFreeNumberTypeID','TFNTypeID' union allselect 'ActiveBool','TFNActiveBool' select * from @UpdateColumnsdeclare @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 Nullablefrom INFORMATION_SCHEMA.COLUMNS ISC join @UpdateColumns UC on ISC.Column_Name = UC.ColNamewhere table_name = 'TollFreeNumber'select * from @UpdateColumntabledeclare @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

现在我想执行一下这个@sql,肿么办?

[解决办法]
exec(@sql)
[解决办法]
SQL code
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 @sqlexec(@sql)
------解决方案--------------------


探讨
用sp_executesql output可以给指定的变量赋值,但是我这个指定的变量本身就是变量,把我郁闷死了。

引用:
SQL code

select top 1 @sql = 'select ' + '@' + ColName + ' = case when ' + '@tfnCriteriaElements.value(''' + '((/Cri……

[解决办法]
有理由去给一个变量的名称起一个自己都不确定的名字?

假如是可以得到的,

请问你后面是怎么返回这个变量的值呢?这个变量的名字谁都不知道。

变量的名字和值不是一回事。
[解决办法]
你写程序应该尽量避免这种绕不灵清的写法!!!!!!!!!!
[解决办法]
变量也没有定义,直接去赋值,而且也不知道变量有多少个,怎么获取呢?感觉真的有点乱了。
[解决办法]
不理解为什么定义一个变量,本身是一个变量?

热点排行