使用存储在变量中的列进行SELECT查询

时间:2013-05-28 08:50:16

标签: sql sql-server sql-server-2008-r2

我有一个存储过程,我在其中获取表的列,这是SELECT语句在逗号分隔的变量中所需的。但它不适合我。:

SP:

ALTER PROCEDURE [dbo].[SPGet_Assistance_Detail]
(
  @Id int,
  @UserDesig varchar(20)  --User Desig can be 'FFR' or 'HO'
)
AS
  DECLARE @Cols VARCHAR(MAX)
  SELECT @Cols = Column_Listing FROM Role_Col_Mapping WHERE Tbl_Name = 'Assistance' and Role = @UserDesig
  SELECT @Cols FROM dbo.Assistance WHERE Service_Id=(@Id)
RETURN

此处Role_Col_Mapping包含以下字段:Tbl_NameRoleColumn_Listing。它根据任何用户在任何表中的角色存储允许任何用户使用的cols数据。 Assistance是一个表格,其中列出了我需要显示的数据。

我输错了。其中cols用逗号分隔。

1 个答案:

答案 0 :(得分:2)

您必须使用动态SQL - 类似这样:

ALTER PROCEDURE [dbo].[SPGet_Assistance_Detail]
(
  @Id int,
  @UserDesig varchar(20)  --User Desig can be 'FFR' or 'HO'
)
AS
  DECLARE @Cols VARCHAR(MAX)
  SELECT @Cols = Column_Listing FROM Role_Col_Mapping WHERE Tbl_Name = 'Assistance' and Role = @UserDesig

  DECLARE @query NVARCHAR(MAX)
  SELECT @query = 'SELECT ' + @Cols + ' FROM CRM.dbo.Assistance WHERE Service_Id=' + cast(@Id AS VARCHAR(MAX))
  EXEC sp_executesql @query

RETURN