Sql 如何检索动态列?
我有一张桌子Sql 如何检索动态列?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张桌子 EmpId FirstName LastName Domain Vertical Account City ---------------------------------------------------------------------------------- 345 Priya Palanisamy DotNet LS Abbott Chennai 346 Kavitha Amirth
EmpId FirstName LastName Domain Vertical Account City
----------------------------------------------------------------------------------
345 Priya Palanisamy DotNet LS Abbott Chennai
346 Kavitha Amirtharaj DotNet CG Diageo Chennai
647 Kala Haribabu DotNet IME IMS Chennai
我希望动态获取特定列。我使用以下过程,但一次只能获取一列
create PROC columnlist
(
@COLUMNS VARCHAR(1000)
)
AS
BEGIN
DECLARE @sql nvarchar(max) = 'SELECT '+ @COLUMNS + ' FROM Table';
exec sp_executesql @sql,N''
END
我想将逗号分隔的值作为参数传递给此过程。我的问题是如何动态检索表列?试试这个-
查询
ALTER FUNCTION dbo.udf_GetTableColumns
(
@Table NVARCHAR(100)
)
RETURNS DATETIME
AS
BEGIN
DECLARE @cols NVARCHAR(MAX)
SELECT @cols = STUFF((
SELECT ', [' + c.name + ']'
FROM sys.columns c WITH(NOWAIT)
WHERE c.[object_id] = OBJECT_ID(@Table)
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
RETURN @cols
END
Exec
SELECT dbo.udf_GetTableColumns('dbo.Table')
试试这个-
查询
ALTER FUNCTION dbo.udf_GetTableColumns
(
@Table NVARCHAR(100)
)
RETURNS DATETIME
AS
BEGIN
DECLARE @cols NVARCHAR(MAX)
SELECT @cols = STUFF((
SELECT ', [' + c.name + ']'
FROM sys.columns c WITH(NOWAIT)
WHERE c.[object_id] = OBJECT_ID(@Table)
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
RETURN @cols
END
Exec
SELECT dbo.udf_GetTableColumns('dbo.Table')
试一试
使用它
EXECUTE columnlist 'FirstName, LastName'
这里是演示试试看
使用它
EXECUTE columnlist 'FirstName, LastName'
这里是演示你的问题毫无意义。向存储过程传递什么?问题是什么?什么不起作用?是否有错误消息?我的问题是如何使用sql存储过程动态检索表列?您的意思是要选择n个列。传递逗号分隔的列名时,您面临的问题是什么?无论你面临什么问题,它都应该有效。你的问题毫无意义。向存储过程传递什么?问题是什么?什么不起作用?是否有错误消息?我的问题是如何使用sql存储过程动态检索表列?您的意思是要选择n个列。传递逗号分隔的列名时,您面临的问题是什么?无论您遇到什么问题,它都应该可以工作。非常感谢您的回复。它现在工作得很好。您看过我提供的sqlfiddle演示吗?什么不起作用?把你如何调用这个过程的代码贴出来。+1-这是一个很好的答案。非常感谢你的回复。它现在运行得很好。你看过我提供的sqlfiddle演示吗?什么不起作用?将您如何调用过程的代码张贴出来。+1-表示正确答案。