3

我有一个包含以下信息的临时表。

TableName ColumnName PrimaryKeyColumnName Primarykey(A GUID)

(4 列)

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

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

select ColumnName from  TableName  where PrimaryKeyColumnName  = Primarykey  

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

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

像这样

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

exec sp_sqlexecute  @sql
4

3 回答 3

1

可能这对你有帮助-

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]
于 2013-12-30T10:09:14.440 回答
0

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

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 的初始值设置为空。我认为不需要游标,这将使用一些 SQL 技巧来解决。希望这会有所帮助...

于 2013-12-30T11:02:20.837 回答
0

Create Table #tempValueFetch

(

TableName sysname,
PrimaryKeyColumnName sysname,
AttributeColumnName sysname,
Primaryfield sysname,
PrimaryKey sysname,
Label nvarchar(max),
Value nvarchar(max)

)

this temp table has been populated with 5 columns namely TableName,PrimaryKeyColumnName,AttributeColumnName ,Primaryfield ,PrimaryKey

The columns label and value has to updated dynamically.Note that primary key is a uniqueidentifier

于 2014-01-02T02:59:38.063 回答