2016-05-18 2 views
0

Я хочу создать таблицу переменных в t-sql с 13 столбцами (YEAR || месяцев) и сохранить имена столбцов в массиве.
Затем, используя цикл, я хочу вводить данные в каждом столбце.T-SQL: как добавить данные в столбцы, хранящиеся в строке?

например:

for i 1..12 
insert into @tablename (@i) 

Возможно ли это? Нужно ли создавать курсор?

+0

Покажите нам, что вы пробовали до сих пор? – Ako

+0

DECLARE fmth varchar (32) = 'January.February.March'; DECLARE smth varchar (32) = 'April.May.June'; DECLARE tmth varchar (32) = 'July.August.September'; DECLARE fomth varchar (32) = 'October.November.December'; DECLARE mth varchar (10); DECLARE i tinyint = 3; DECLARE Report Таблица ( \t Год SMALLINT, \t января INT, \t февраля INT, \t марта INT, \t апреля INT, \t Может ИНТ \t Juni INT, \t июля INT, \t августа ИНТ , \t сентябрь int, \t октябрь int, \t ноябрь int, \t декабря INT ) ПОКА я> 0 НАЧАТЬ \t MTH = ParseName (fmth, я) \t вставки в отчет (МТХ) \t я = я - 1; END – Fili

+0

также с @ потому что они переменные, но у меня недостаточно времени, чтобы выяснить, как их добавить – Fili

ответ

0

Я не могу понять ваш вопрос правильно, это вы ищете?

Ниже код будет циклически трижды вставляться в соответствующие столбцы.

Примечание: Вы не можете реализовать переменную таблицы с динамическим SQL. Для этой цели вам необходимо использовать физическую или временную таблицу.

DECLARE @fmth varchar(32) = 'January.February.March'; 
DECLARE @smth varchar(32) = 'April.May.June'; 
DECLARE @tmth varchar(32) = 'July.August.September'; 
DECLARE @fomth varchar (32) = 'October.November.December'; 
DECLARE @mth varchar(10); 
DECLARE @i INT =3; 

CREATE TABLE #Report 
(Year smallint, January int, February int, March int, April int, May int, June int, July int, August int, 
September int, October int, November int, December int) 

WHILE(@I > 0) 
BEGIN 
    DECLARE @IChar Varchar(5) = CAST(@I AS VArchar(5)) 
    DECLARE @Month1 varchar(20) = PARSENAME(@fmth,@i) 
    DECLARE @Month2 varchar(20) = PARSENAME(@smth,@i) 
    DECLARE @Month3 varchar(20) = PARSENAME(@tmth,@i) 
    DECLARE @Month4 varchar(20) = PARSENAME(@fomth,@i) 

    -- Do Insert operation here 
     DECLARE @MyDynamicSQL VARCHAR(4000) 
     = 'INSERT INTO #Report('[email protected]+','[email protected]+','[email protected]+', '[email protected]+') 
      VALUES ('[email protected]+','[email protected]+','[email protected]+','[email protected]+')' 
      EXEC(@MyDynamicSQL) 

    SET @i = @I - 1 
END 
SELECT * FROM #Report 
DROP TABLE #Report 
+0

Я хочу создать таблицу, где я могу посмотреть чистую стоимость покупки клиентов. У меня 3 таблицы, откуда я беру данные для формул. У меня есть решение, но мне нужна эта вещь, чтобы иметь место, где нужно вставлять данные. – Fili

+0

Большое спасибо за помощь. – Fili

Смежные вопросы