Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 массив  [new]
Anna82
Member

Откуда:
Сообщений: 114
Мне ндо таблицу из 10 записей вывести в файл.
Произвожу я это слудующим образом:

DECLARE @FileName varchar(255),
@Text1 varchar(8000),
@FS int,
@OLEResult int,
@FileID int,
@hr int,
@source varchar(30),
@desc varchar (200)

EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUTPUT

IF @OLEResult <> 0
BEGIN
PRINT 'Scripting.FileSystemObject'
GOTO Error_Handler
END

execute @OLEResult = sp_OAMethod @FS,'CreateTextFile',@FileID OUTPUT, 'c:\file.bat'
IF @OLEResult <> 0
BEGIN
PRINT 'CreateTextFile'
GOTO Error_Handler
END

set @Text1 = (select User from table )
execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @Text1
IF @OLEResult <> 0
BEGIN
PRINT 'WriteLine'
GOTO Error_Handler
END

Print @Text1
goto Done

Error_Handler:
PRINT '*** ERROR ***'
EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT
SELECT hr = CONVERT (binary(4), @hr), source = @source, description = @desc

Done:
EXECUTE @OLEResult = sp_OADestroy @FileID
EXECUTE @OLEResult = sp_OADestroy @FS

При этом у меня выдает ошибку:

Server: Msg 512, Level 16, State 1, Line 25
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Наверное, переменная @Text1 должна описываться как массив...
Но я не знаю как описать переменную массива. А может вообще не в этом дело? Помоги, пожалуйста.
7 ноя 05, 14:46    [2042626]     Ответить | Цитировать Сообщить модератору
 Re: массив  [new]
Брюлик
Member

Откуда:
Сообщений: 690
А если так
create table ww
(
col1 int,
col2 varchar(50),
col3 varchar (50)
)

insert into ww values (47,'ReadyShip','(503)888-999')
insert into ww values (48,'MyShipper','(503)1212-454')
insert into ww values (49,'ReadyShip','(45)888-999')
insert into ww values (50,'MyShipper','(545)1212-454')
---ПРОМТ
bcp northwind.dbo.ww out d:\test1.txt -c -t, -SServer -Usa -Ppass

-qa
exec master..xp_cmdshell 'BCP northwind..ww IN d:\test1.txt -c -C850 -SServer -Usa -Ppass'
7 ноя 05, 14:51    [2042658]     Ответить | Цитировать Сообщить модератору
 Re: массив  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34226
Блог
set @Text1 = (select User from table )
В одну переменную вы пытаетесь записать набор значений.

PS судя по 'c:\file.bat' вам возможно стоит посмотреть в сторону xp_cmdshell
7 ноя 05, 14:53    [2042669]     Ответить | Цитировать Сообщить модератору
 Re: массив  [new]
boo-mmx
Member

Откуда: Волгоград
Сообщений: 91
Anna82
set @Text1 = (select User from table )

@Text1 - это скалярная переменная. Результатом запроса является выборка.
Почитай про курсоры.

DECLARE cur CURSOR FAST_FORWARD FOR SELECT User FROM table 

OPEN cur

FETCH NEXT FROM cur INTO @Text1
WHILE @@FETCH_STATUS = 0
BEGIN

...
         FETCH NEXT FROM cur INTO @Text1
END

CLOSE cur
DEALLOCATE cur
7 ноя 05, 14:56    [2042684]     Ответить | Цитировать Сообщить модератору
 Re: массив  [new]
Anna82
Member

Откуда:
Сообщений: 114
boo-mmx: У меня теперь на каждой записи выдает эту ошибку...
7 ноя 05, 15:10    [2042779]     Ответить | Цитировать Сообщить модератору
 Re: массив  [new]
Anna82
Member

Откуда:
Сообщений: 114
boo-mmx: А еще записывает только одну запись, а мне надо 10...
7 ноя 05, 15:17    [2042820]     Ответить | Цитировать Сообщить модератору
 Re: массив  [new]
Glory
Member

Откуда:
Сообщений: 104760
Anna82

Наверное, переменная @Text1 должна описываться как массив...
Но я не знаю как описать переменную массива. А может вообще не в этом дело? Помоги, пожалуйста.

1. В TSQL нет массивов. И нет переменных соответствующего типа
2. Вы вроде бы заявили, что прочитали ссылку и "все получилось"
https://www.sql.ru/forum/actualthread.aspx?tid=232503#2041972
7 ноя 05, 15:30    [2042894]     Ответить | Цитировать Сообщить модератору
 Re: массив  [new]
Anna82
Member

Откуда:
Сообщений: 114
Glory: Получилось для одной записи... А сейчас в таблицу пишется и там уже не одна строка...
7 ноя 05, 15:38    [2042948]     Ответить | Цитировать Сообщить модератору
 Re: массив  [new]
Glory
Member

Откуда:
Сообщений: 104760
Anna82
Glory: Получилось для одной записи... А сейчас в таблицу пишется и там уже не одна строка...

Перечитайте ссылку еще раз. Там есть в точности описание вашей ошибки.
7 ноя 05, 15:40    [2042967]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить