既存の列名を角かっこ[]で囲むことができるSQLコマンドがあるかどうか疑問に思っています。
たとえば、には、、、、というタイトルのMyTable
列があります。これらを変更して、新しい列名が、、、、になるようにします。1
2
3
4
[1]
[2]
[3]
[4]
これを可能にするSQLステートメントはありますか?
SQL Serverでは、次のようなことができると思います。
select [1] as [[1]]], [2] as [[2]]] ...
奇妙な要件のようですが
角かっこはSQLServer/T-SQL構文です。列名には、名前の一部として角かっこが含まれていません。角かっこは、SQLステートメントを作成するときに使用され、列名を予約済みのキーワードにすることができます。このようにして、「テーブル」という名前の列を作成できます。
CREATE TABLE [MyTable](
[Table] [nchar](10) NULL,
[Column] [nchar](10) NULL,
)
GO
SELECT [Table], [Column] from MyTable
GO
Sql Server では、次のように機能します。
select 1 AS "[1]"
もちろん、これはリテラル整数 1 を選択します。1 というフィールドを選択するには、次のようにする必要があります。
select [1] AS "[1]"
私はコメンターに同意します。アイデア全体が危険に満ちているように見えますが、レガシー/独自のデータを扱っている場合、選択の余地がない場合があります.
これを自動的に行いたい場合は、次のコードを実行できます (または、再利用のためにストアド プロシージャにします)。
BEGIN
DECLARE @Comma AS VARCHAR(2)
DECLARE @Sql as VARCHAR(5000)
DECLARE @Column AS VARCHAR(50)
SET @Sql = 'SELECT '
SET @Comma = ''
DECLARE ColCsr CURSOR FOR
SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'MyTable'
OPEN ColCsr
FETCH NEXT FROM ColCsr INTO @Column
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql = @Sql + @Comma + @Column + ' AS "[' + @Column + ']"'
SET @Comma = ', '
FETCH NEXT FROM ColCsr INTO @Column
END
CLOSE ColCsr
DEALLOCATE ColCsr
SET @Sql = @Sql + ' FROM MyTable'
EXEC (@Sql)
END