Я пытаюсь написать эту хранимую процедуру, но у меня есть проблема проходящее результат Темп таблицы (или табличной переменной) для EXEC (@SQL)
задачи:Pass таблицы переменных для EXEC SQL Server
DECLARE @colsUnpivot AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
DECLARE @Table_Name as Varchar(200)
DECLARE @transaction_Table NVarchar(500)
SET @Table_Name = 'opd_scholar'
SET @transaction_Table = 'opd_scholar_transaction'
--DECLARE @TEMP TABLE(colsUnpivot varchar(max))
CREATE TABLE #TEMP (colsUnpivot varchar(max))
SELECT @colsUnpivot = 'SELECT
STUFF ((
SELECT '', ''+ QUOTENAME(InTab.COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS InTab
WHERE InTab.TABLE_NAME = OutTab.TABLE_NAME
ORDER BY InTab.ORDINAL_POSITION
FOR XML PATH(''''), TYPE
).value(''.'',''VARCHAR(MAX)''
) , 1,1,SPACE(0))
FROM INFORMATION_SCHEMA.COLUMNS OutTab
WHERE TABLE_NAME = '''+ @Table_Name +'''
GROUP BY OutTab.TABLE_NAME'
--INSERT INTO @TEMP (colsUnpivot)
INSERT INTO #TEMP (colsUnpivot)
EXEC(@colsUnpivot)
PRINT @colsUnpivot
--SELECT colsUnpivot FROM @TEMP
SELECT colsUnpivot FROM #TEMP
DECLARE @TEMP1 NVARCHAR(MAX) = 'SELECT colsUnpivot FROM #TEMP'
--PRINT @TEMP
SET @query
= 'INSERT INTO '+ @transaction_Table +' ( unitid,institution,city,state,zip,code_name,lkp_value)
SELECT unitid,institution,city,state,zip,code_name,lkp_value
FROM
(
SELECT unitid,institution,city,state,zip, '+ @TEMP1+'
FROM '[email protected]_name+') AS cp
UNPIVOT (lkp_value for code_name IN ('[email protected]+')
) AS up'
PRINT @Query
--PRINT @Query1
EXEC(@query)
DROP TABLE #TEMP
Я также использовал таблицу переменных (см прокомментировал область), но не уверен, как это работает.
Скопируйте и вставьте этот код в свое окно запроса, чтобы получить больше понимания. Thats right Hogan. Я хочу получить результат @colsUnpivot внутри некоторой переменной, чтобы я мог передать ее в следующий сегмент кода, где в настоящее время я использую @ TEMP1.
'но у меня есть проблема проходящего результата от темпа table', вы можете объяснить, что это ваша проблема? – Lamak
Что-то странное здесь, с одной стороны, похоже, что вы пытаетесь сделать список столбцов, разделенных запятыми. но вы говорите, что хотите передать переменную таблицы. В любом случае проблема явно здесь -> 'DECLARE @ TEMP1 NVARCHAR (MAX) = 'SELECT colsUnpivot FROM # TEMP'' Я считаю, что вы хотите @ TEMP1 (имя хорошей переменной!), Чтобы удерживать список столбцов, а не строку выбора. – Hogan
Мне действительно не нужно копировать и вставлять в окно, чтобы понять. У вас есть проблема с областью действия здесь - если у вас есть динамический SQL для создания переменной, вы не можете передать ее обратно - единственный способ сделать это - это отдельная функция или найти способ не использовать динамический SQL – Hogan