У меня есть хранимая процедура, в которой я получаю столбец таблицы, который необходим для оператора 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
. Он хранит данные о столбцах, разрешенных любому пользователю в зависимости от его роли в любой таблице. А Assistance
- это таблица, данные столбцов которой мне нужно было отобразить.
Я получаю неверный вывод. Это столбцы, разделенные запятой.
1 ответ
Вы должны использовать динамический 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
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
PRINT @query
, чтобы увидеть, что вы получаете, прежде чем запускать, и настройте соответствующим образом. Я не знаю, что у вас за@cols
, возможно, в конце или начале есть запятые, которые нужно удалить