关于执行一段带有变量的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)
------解决方案--------------------
[解决办法]
有理由去给一个变量的名称起一个自己都不确定的名字?
假如是可以得到的,
请问你后面是怎么返回这个变量的值呢?这个变量的名字谁都不知道。
变量的名字和值不是一回事。
[解决办法]
你写程序应该尽量避免这种绕不灵清的写法!!!!!!!!!!
[解决办法]
变量也没有定义,直接去赋值,而且也不知道变量有多少个,怎么获取呢?感觉真的有点乱了。
[解决办法]
不理解为什么定义一个变量,本身是一个变量?