动态SQL-从临时表中选取值

动态SQL-从临时表中选取值,sql,sql-server,dynamics-crm-2011,audit-trail,Sql,Sql Server,Dynamics Crm 2011,Audit Trail,我有一个临时表,其中包含以下信息 TableName ColumnName PrimaryKeyColumnName Primarykey(GUID) (4栏) 我需要包含一个新的列值,该列值应根据以下条件获取数据 “对于临时表中的每一行” 更准确地说,查询必须直接从表中检索值 我相信这可以通过使用游标来实现。但这可能会影响我的查询性能。 这可以通过使用sp_sqlexecute实现吗?我尝试将查询转换为varchar 像这样 set @sql = 'select '+ #final.[prim

我有一个临时表,其中包含以下信息

TableName ColumnName PrimaryKeyColumnName Primarykey(GUID)

(4栏)

我需要包含一个新的列值,该列值应根据以下条件获取数据

“对于临时表中的每一行”

更准确地说,查询必须直接从表中检索值

我相信这可以通过使用游标来实现。但这可能会影响我的查询性能。 这可以通过使用sp_sqlexecute实现吗?我尝试将查询转换为
varchar

像这样

set @sql = 'select '+ #final.[primary field] +'from ' + #final.tablename +
                'where '+ #final.PrimaryKeyColumnName  + '='+ #final.Primarykey  

exec sp_sqlexecute  @sql

这可能对你有帮助-

IF OBJECT_ID('tempdb.dbo.#temp') IS NOT NULL
    DROP TABLE #temp
GO

CREATE TABLE #temp
(
    [primary field] SYSNAME,
    tablename SYSNAME,
    PrimaryKeyColumnName SYSNAME,
    Primarykey SYSNAME
)

INSERT INTO #temp ([primary field], tablename, PrimaryKeyColumnName, Primarykey) 
VALUES 
    ('[column1]','[table1]','[column3]', '[column12]'), 
    ('[column2]','[table2]','[column4]', '[column24]')


DECLARE @SQL NVARCHAR(MAX)
SET @SQL = (
    SELECT CHAR(13) + 'SELECT '+ [primary field] + ' FROM ' + tablename +
        ' WHERE '+ PrimaryKeyColumnName  + ' = '+ Primarykey 
    FROM #temp
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')

PRINT @SQL
--EXEC sys.sp_executesql @SQL
输出-

SELECT [column1] FROM [table1] WHERE [column3] = [column12]
SELECT [column2] FROM [table2] WHERE [column4] = [column24]

我不确定我是否理解您的意图,但请尝试以下操作:

declare @sql varchar(8000);
set @sql = null;
select @sql = 
coalesce(@sql+' union all select '+ColumnName+' from '+ tablename,  
'select '+ColumnName+' from '+ tablename) 
from final where ColumnName = PrimaryKeyColumnName;
exec sp_sqlexecute @sql;       
请注意@sql是有限的——在我的示例8000中——如果临时表太大,您必须进行单独的执行,需要在代码中进行一些更改。 始终必须将@SQL的初始值设置为null。 我认为不需要游标,这将使用一些SQL技巧来解决。 希望这将有助于…

创建表#tempValueFetch

(

)

此临时表已填充了5列,即TableName、PrimaryKeyColumnName、AttributeColumnName、Primaryfield、PrimaryKey


列标签和值必须动态更新。请注意,主键是唯一标识符

,非常感谢。这就是我所期待的。我担心我的问题会清楚得让人理解。您保存了这一天。我如何将值更新到主表。例如update#final set@somecolumnname=exec sys.sp_executesql@sql您能提供一个小示例吗?您好,请查找我在上面发布的示例
declare @sql varchar(8000);
set @sql = null;
select @sql = 
coalesce(@sql+' union all select '+ColumnName+' from '+ tablename,  
'select '+ColumnName+' from '+ tablename) 
from final where ColumnName = PrimaryKeyColumnName;
exec sp_sqlexecute @sql;       
TableName sysname,
PrimaryKeyColumnName sysname,
AttributeColumnName sysname,
Primaryfield sysname,
PrimaryKey sysname,
Label nvarchar(max),
Value nvarchar(max)