0
--Dummy table
create table table1 (
column_order varchar (100)
)

insert into table1 values ('column1')
insert into table1 values ('column2')
insert into table1 values ('column3')
insert into table1 values ('column4')
insert into table1 values ('column5')
insert into table1 values ('column6')

--Start of select

declare @rowsCount INT
declare @i INT = 1
declare @column varchar(1000) = ''

set @rowsCount = (select COUNT(*) from table1)

while @i <= @rowsCount
begin
 set @column = @column + (select column_order from table1 where rowid(table1) = @i) + ', '
 set @i = @i + 1
end
select @column

このコードには、IQ-Sybase 関数である関数 ROWID があり、他のどの DBMS がそれを使用できるかわかりません。そして、上に、私の選択をどのように見せたいかの例があります。

私の問題は、sys.column またはその他の systables で ROWID 関数を使用できないことです。ROWID 関数を使用せずに、私のものと同じ選択を取得する方法を知っている人はいますか。

IQ を使用している場合は、f5 と入力して select ステートメントを確認できるようにコードを作成しました。その後、ダミー テーブルを削除するだけです。

4

3 に答える 3

1

list() を使用します。これは、ASA システムと IQ カタログの両方で機能します。

drop table if exists table1
go

create local temporary table table1 (
column_order varchar (100)
) in system --create table in system

insert into table1 values ('column1')
insert into table1 values ('column2')
insert into table1 values ('column3')
insert into table1 values ('column4')
insert into table1 values ('column5')
insert into table1 values ('column6')

declare @columns varchar(100)

select @columns = list(column_order) from table1

select @columns
go
于 2014-10-15T21:33:01.983 に答える
0

なぜrowdidが必要なのかわからないので、あなたの必要性を理解していないかもしれません。

通常、TSQL では次のようにします。

declare @someVar as nvarchar(max)

set @someVar = (select 
    '[' + c.name + '],' as 'data()'
from
    sys.columns c
    join sys.tables t on c.object_id = t.object_id
where
    t.name = 'SomeTableName'
for xml path(''))

print Left(@someVar, Len(@someVar) - 1)
于 2014-10-15T14:56:55.160 に答える
0

カーソルを使用する必要があるかもしれません:

-- @MyTableID has to be definded somewhere or replace
DECLARE @columns varchar(32000)
DECLARE my_cursor CURSOR FOR
    SELECT syscolumn.column_name FROM syscolumn WHERE syscolumn.table_id = @MyTableID
OPEN my_cursor
FETCH NEXT my_cursor into @column
WHILE @@FETCH_STATUS = 0
    BEGIN
        -- put your magic here
        -- e.g.
        -- SET @columns = @columns + column
        FETCH NEXT my_cursor_pkey into @column
    END

CLOSE my_cursor
DEALLOCATE my_cursor

まだテストされていませんが、そのようなものはうまくいくはずです。

于 2014-10-15T17:07:41.030 に答える