我有一个存储过程,我在其中获取表的列,这是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_Name
,Role
和Column_Listing
。它根据任何用户在任何表中的角色存储允许任何用户使用的cols数据。 Assistance
是一个表格,其中列出了我需要显示的数据。
我输错了。其中cols用逗号分隔。
答案 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