我有一张桌子
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
我想将逗号分隔值作为参数传递给此Procedure.My问题是如何动态地检索表列?
答案 0 :(得分:3)
尝试
CREATE PROCEDURE columnlist
(
@COLUMNS VARCHAR(MAX)
)
AS
BEGIN
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT '+ @COLUMNS + ' FROM Table1'
EXECUTE(@sql)
END
使用它
EXECUTE columnlist 'FirstName, LastName'
这是 SQLFIddle 演示
答案 1 :(得分:2)
试试这个 -
<强>查询强>
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')