动态sql使用表变量-TSQL



我的问题是在执行中使用表变量。

declare @sort_col nvarchar(1000) = 'itm_id'
declare @sort_dir nvarchar(4) = 'desc'
declare @filters nvarchar(1000) = ' and itm_name like ''%aa%'''
declare @temp table
(
 itm_id int
)
insert into @temp
EXEC('select itm_id from Tblitm where itm_name not like ''%aa%''')
EXEC('select * from (select (ROW_NUMBER() OVER (ORDER BY '+@sort_col+' '+@sort_dir+')) row_num, * FROM (select itm_id, itm_name, 
dbo.fnItmsHistory(itm_id) itm_history
         from dbo.Tblitm as itm
         left outer join '+@temp+' as temp on itm.itm_id = temp.itm_id
         where itm_id=itm_id and temp.itm_id = null '+@filters+') as x) as tmp')

它说必须声明标量变量"@temp"时,临时表声明我尝试使用原始的临时表,它工作,但我有问题,当试图更新我的实体模型。那么这个问题有什么解决办法吗?

注意:我必须使用exec,因为在过滤器中我为where子句存储字符串。

尝试将table变量移动到动态语句中。

EXEC('
declare @temp table
(
 itm_id int
)
insert into @temp
select itm_id from Tblitm where itm_name not like ''%aa%''
select * from (select (ROW_NUMBER() OVER (ORDER BY '+@sort_col+' '+@sort_dir+')) row_num, * FROM (select itm_id, itm_name, 
dbo.fnItmsHistory(itm_id) itm_history
         from dbo.Tblitm as itm
         left outer join @temp as temp on itm.itm_id = temp.itm_id
         where itm_id=itm_id and temp.itm_id = null '+@filters+') as x) as tmp')

对于解决方案,我必须使用临时表,然后在我的存储过程开始时,我使用了EF中的if条件,EF不能从存储过程中推断返回模式,从#temp表中选择答案。

最新更新