SQL Server: добавить символ в строку между двумя значениями, разделенными запятыми

declare @qry nvarchar(max)
set @qry='IType, INum, IDate, PO, FCode, Tx, Fr, TI, Not'

select @qry = 'select distinct ti.ID,' + @qry +
 ' from tblInfo ti inner join tblheadr th on ti.IA=1 AND ti.BId = ' +
 CAST(@BId as varchar) + ' AND th.CUId =' + CAST(@UserID as varchar)

Теперь я хочу, чтобы мой запрос был

select distinct 
 ti.ID, ti.IType, ti.INum, ti.IDate, ti.PO, ti.FCode, ti.Tx, ti.Fr, ti.TI, ti.Not 
from 
 tblInfo ti 
inner join 
 tblheadr th on ti.IA = 1 AND ti.BId = 285 and th.CUId = 2

Мне нужно добавить 'ti.' для каждого значения в @qry..

Можете ли вы предложить мне, как отделить его, добавьте ti. между @qry?

2 ответа

Здесь более короткое решение:

SET @qry = 'IType, INum, IDate, PO, FCode, Tx, Fr, TI, [Not]'
SET @qry = 'ti.' + REPLACE(@qry, ', ', ', ti.')

Вы должны поставить Not в квадратных скобках, потому что это зарезервированное ключевое слово SQL.


Это должно работать:

select @qry = 
 'select distinct ti.ID,' 
 + replace(replace(replace(@qry, ', Not', ', [Not]'), @qry, 'ti.' + @qry), ', ',', ti.') 
 +' from tblInfo ti inner join tblheadr th on ti.IA=1 AND ti.BId = ' 
 + QUOTENAME(CAST(@BId as varchar(max)), '''') 
 + ' AND th.CUId =' 
 + QUOTENAME(CAST(@UserID as varchar(max)),'''')

Вы действительно должны указать размер для varchar casts, а также обратите внимание, что это not ключевое слово, которое нужно экранировать, поэтому я добавил это. Скорее всего, вам также нужно использовать QUOTENAME, чтобы заключить значения параметров в кавычки (я тоже добавил это).

Результирующая переменная @qry будет следующей:

select distinct 
 ti.ID,IType, ti.INum, ti.IDate, ti.PO, ti.FCode, ti.Tx, ti.Fr, ti.TI, ti.[Not] 
from tblInfo ti 
inner join tblheadr th on ti.IA=1 AND ti.BId = 'BidA' AND th.CUId ='UserA'

Если переменные объявлены как:

declare @userid nvarchar(max) = 'UserA'
declare @bid nvarchar(max) = 'BidA'

На стороне примечания: глядя на ваше соединение между tblInfo и tblHeadr, похоже, что нет условия соединения, только условия для отдельных таблиц (что, вероятно, должно быть записано в предложении WHERE). Может, вы забыли присоединиться th.? = ti.? th.? = ti.? ?

licensed under cc by-sa 3.0 with attribution.