Maideen Abdul Kader Ответов: 1

Как решить эту ошибку "необходимо объявить скалярную переменную", даже если она уже объявлена ?


Привет
У меня есть ошибка в процедуре хранения Mssql с использованием BCP bulk transfer data в csv файл
Ошибка : - "необходимо объявить скалярную переменную "@EXPORT_EXCEL"

Пожалуйста, посоветуйте мне.

Заранее спасибо

Мейден

Что я уже пробовал:

	DECLARE @Servername varchar(100)
	SET @Servername ='xxxxxxx'

   DECLARE @EXPORT_EXCEL TABLE
    (
		[BL_NO] [varchar](30) NULL,
		[VESSAL_NAME] [varchar](100) NULL,
		[CONTAINER_NO] [varchar](50) NULL,
		[CONTAINER_TYPE] [varchar](10) NULL

	)
    

		INSERT INTO @EXPORT_EXCEL (BL_NO, VESSAL_NAME,CONTAINER_NO,CONTAINER_TYPE) 
		SELECT BL_NO, VESSAL_NAME,CONTAINER_NO,CONTAINER_TYPE FROM [dbo].[ZR_tbl_Export_FILE] 
		ORDER BY VESSAL_NAME


declare @sql varchar(8000)
select @sql = 'bcp guard_security.dbo.' + @EXPORT_EXCEL + 'out c:\ExportExcel\Export_FILE.csv -c -t, -T -S' +  @servername
	   exec master..xp_cmdshell @sql

1 Ответов

Рейтинг:
0

OriginalGriff

@EXPORT_EXCEL это не переменная, а переменная таблицы, которая означает, что она ограничена областью действия выполняемой процедуры или команды: как только выполнение завершится (что произойдет сразу после выдачи команды exec), таблица будет уничтожена - вы не можете просто вставить таблицу в команду SQL, где система ожидает имя таблицы как часть своей спецификации DB.Table!
И даже если бы вы могли, вы не передали бы содержимое таблицы в операционную систему, используя этот код, поскольку он не существовал бы, когда bcp начал выполняться!

Для вывода в формате CSV, почему бы просто не использовать XML PATH:

SELECT SUBSTRING(
(SELECT ',' + CONVERT(varchar, Id) FROM myTable WHERE date BETWEEN '2011-01-01' AND '2012-01-01'
FOR XML PATH('')),2,100000) AS CSV
И написать это?