удалить последнюю запятую из столбца - PullRequest
0 голосов
/ 24 сентября 2019

Здесь я написал некоторые относительно ожидаемого результата, но он не работает для последнего столбца, все поля должны заканчиваться запятой, исключая значение последнего столбца, я использую что-то вроде этого, мой код дает ниже

declare @query varchar set @Query = Left(@Query,len(@Query)-1)
SELECT  '@' + COLUMN_NAME as c1,
CASE DATA_TYPE 

WHEN 'NVARCHAR' then 'nvarchar(max)' + ','
WHEN 'INT' then 'int'  + ','
WHEN 'DATETIME' then 'Datetime()' + ',' 
when 'Float' then 'float' + ','
end
as c2
from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tbl_data'



c1           c2

@MastCode   float,
@BALCO_EMP_ID   float,
@MastName   nvarchar(max),
@FatherName nvarchar(max),
@Department nvarchar(max),
@PlantName  nvarchar(max),
@PO         nvarchar(max),
@PO_START   nvarchar(max),
@PO_END         nvarchar(max),
@Contractor nvarchar(max),
@ContractorCode nvarchar(max)

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете поместить текущую логику запроса в CTE, а затем обработать последнюю запятую, используя аналитические функции:

WITH cte AS (
    SELECT '@' + COLUMN_NAME AS c1,
        CASE DATA_TYPE 
        WHEN 'NVARCHAR' THEN 'nvarchar(max)'
        WHEN 'INT' THEN 'int'
        WHEN 'DATETIME' THEN 'Datetime()'
        WHEN 'Float' THEN 'float' END AS c2,
        ROW_NUMBER() OVER (ORDER BY DATA_TYPE) AS rn,
        COUNT(*) OVER () AS cnt
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'tbl_data'
)

SELECT
    c1 As col1,
    c2 + CASE WHEN rn < cnt THEN ',' ELSE '' END AS col2
FROM cte;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...