1

列名を提供する SQL Server で定数を宣言できるかどうかお尋ねしたいのですが。

次のような意味です:

declare @column varchar(30)
set @column = 'Column1'

SELECT @column FROM Table1

上記の宣言が間違っていることは知っていますが、列名を自分で提供することが解決策になるかもしれません。

の結果を表示したいのですColumn1が、 '' 内にある場合Column1(No column name)追加の列名で返され、すべての行の結果は になりますColumn1

ありがとうございました

4

6 に答える 6

2

SQL では動的列名を使用できません。

そのためには、動的 SQL を使用する必要があります。この問題を完全に理解するには、Erland SommarskogによるThe Curse and Blessings of Dynamic SQL を読むことをお勧めします。この記事は長いですが、包括的です。

動的 SQL を使用すると、 SQL インジェクションにさらされる可能性があるため、注意して使用してください。

于 2012-04-19T09:33:34.863 に答える
1

このためには、動的クエリを利用する必要があり、slq サーバーを使用している場合は sp_execute で実行できます。

DECLARE @SQLString nvarchar(1000)
declare @column varchar(30)  
set @column = 'Column1'
SET @SQLString  = 'SELECT ' + @column + ' in Table1 '
EXECUTE sp_executesql @SQLString
于 2012-04-19T09:34:36.893 に答える
0

要するに、いいえ、それはできません。動的SQLを使用する必要があります。

于 2012-04-19T09:32:57.073 に答える
0

動的 SQLを使用します。

コードは次のようになります。

DECLARE @sqlCommand nvarchar(1000)
DECLARE @column varchar(75)
SET @column = 'Column1'
SET @sqlCommand = 'SELECT ' + @column + ' from Table1'
EXECUTE sp_executesql @sqlCommand, N'@column nvarchar(75)', @column = @column

sp_executesqlの詳細については、これを確認してください。


@Oded が述べたように、このタイプのソリューションでは SQL インジェクションが可能です!

于 2012-04-19T09:33:53.750 に答える
0
declare @query varchar(100)
set @query = 'select Column1 from table1'
exec (@query)
于 2012-04-19T09:34:46.903 に答える
0

あなた自身が言ったように、上記の宣言は正しくありません。ただし、クエリ全体を動的 SQL として保存し、.xml を使用して実行できますExec()

あなたの場合は次のようになります。

declare @column varchar(30)
set @column = 'Column1'

declare @sqlSelect varchar(500)

set @sqlSelect = 'SELECT ' + @column + ' in Table1'
Exec( @sqlSelect )
于 2012-04-19T09:35:40.177 に答える