我有一个临时表,其中包含以下信息。
TableName ColumnName PrimaryKeyColumnName主键(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
答案 0 :(得分: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]
答案 1 :(得分: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的初始值设置为null。 我认为不需要游标,这将使用一些SQL技巧解决。 希望这会有所帮助......
答案 2 :(得分:0)
创建表#tempValueFetch
(
TableName sysname,
PrimaryKeyColumnName sysname,
AttributeColumnName sysname,
Primaryfield sysname,
PrimaryKey sysname,
Label nvarchar(max),
Value nvarchar(max)
)
此临时表已填充5列,即TableName,PrimaryKeyColumnName,AttributeColumnName,Primaryfield,PrimaryKey
列标签和值必须动态更新。请注意,主键是uniqueidentifier