Нельзя хранить внутри #
(временная таблица), не определив его в родительской области при использовании sp_executesql
. В вашем случае у вас есть динамика pivot
, и вы не знаете, что и сколько там будет столбцов.
sp_executesql
выполняется в другом сеансе (sp_executesql создает свой собственный сеанс), а временные таблицы зависят от конкретного сеанса.
Для вашего сценария вы можете использовать ##
(глобальная временная таблица). Вы можете изменить свой запрос следующим образом.
SELECT @query =
'
SELECT
* into ##temp
FROM
(SELECT
Count(dbo.InventoryBiltyMaster.ID) AS BiltyCount,
--dbo.InventoryBiltyMaster.InventoryProductMasterID,
--dbo.InventoryBiltyMaster.VehicleMasterID,
dbo.InventoryProductMaster.Name,
dbo.VehicleMaster.VehicleNumber
FROM
dbo.InventoryBiltyMaster
INNER JOIN dbo.InventoryPartyProductPriceMaster ON dbo.InventoryBiltyMaster.InventoryPartyProductPriceMasterID = dbo.InventoryPartyProductPriceMaster.ID
INNER JOIN dbo.InventoryProductMaster ON dbo.InventoryPartyProductPriceMaster.InventoryProductMasterID = dbo.InventoryProductMaster.ID
INNER JOIN dbo.VehicleMaster ON dbo.InventoryBiltyMaster.VehicleMasterID = dbo.VehicleMaster.ID
WHERE
dbo.InventoryBiltyMaster.PartyMasterID = ' + CAST(@partymasterid as nvarchar(50)) + '
GROUP BY
dbo.InventoryBiltyMaster.InventoryProductMasterID,
dbo.InventoryProductMaster.Name,
dbo.InventoryBiltyMaster.VehicleMasterID,
dbo.VehicleMaster.VehicleNumber
)
AS S
PIVOT
(
MAX(BiltyCount)
FOR [Name] IN (' + LEFT(@cols, LEN(@cols)-1) + ')
)AS pvt';
EXEC SP_EXECUTESQL @query
--now you can use ##temp
Примечание : использование глобальной временной таблицы может привести к непредсказуемому поведению, если она обновляется после нескольких сеансов, вы можете подумать о назначении уникального имени для каждой сессии.
К сожалению, Windows Installer не позволяет создавать единственный пакет, который может установить на машину и в расчете на пользователя, но только запросить контроль учётных записей на случае на машину. Проблема - то, что бит, который может подавить подсказку контроля учётных записей, хранится в потоке SummaryInformation и не модифицируемый, в то время как пакет выполняется.
Попробуйте эту ссылку: контроль учётных записей в Примечаниях MSI: Как Создать Пакеты, которые работают на Типичного Пользователя и на На машину?
Я отключил UAC, установив бит 3 в PID_WORDCOUNT в моем пакете MSI. Я могу установить его для «ALLUSERS» и «PER-USER», а также записать для HKLM в обоих режимах на машинах VISTA. Обязательно ли получать всплывающее окно UAC для привилегированного пользователя во время установки?