0

我有一个存储过程,我在其中获取表的列,该列是用逗号分隔的变量中的 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。

4

1 回答 1

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
于 2013-05-28T08:54:27.947 回答