sql >> データベース >  >> RDS >> Sqlserver

動的SQLを使用して、単純なSQLクエリに変数を追加して列名を指定する

    列名を動的に指定しようとしている場合は、動的SQLの実行を確認できます。ただし、最初にこのアプローチの危険性について必ずお読みください。

    http://www.sommarskog.se/dynamic_sql.html

    そのページから、テーブル名を動的に指定することを示すサンプルがあります。代わりに列名を動的に指定するように変更できます。

    CREATE PROCEDURE general_select @tblname nvarchar(128),
                                    @key     varchar(10),
                                    @debug   bit = 0 AS
    DECLARE @sql nvarchar(4000)
    SET @sql = 'SELECT col1, col2, col3
                FROM dbo.' + quotename(@tblname) + '
                WHERE keycol = @key'
    IF @debug = 1 PRINT @sql
    EXEC sp_executesql @sql, N'@key varchar(10)', @key = @key
    

    したがって、たとえば、「x」、「y」、および「z」という名前の列を持つテーブル「MyTable」がある場合、次のようになります。

    DECLARE @columnName nvarchar(128)
    DECLARE @sql nvarchar(4000)
    set @columnName = 'z'
    
    SET @sql = 'SELECT x, y, ' + @columnName + ' from MyTable'
    EXEC sp_executesql @sql, N'@columnName varchar(128)', @columnName = @columnName
    


    1. 動的に生成されたテーブル名を使用して選択

    2. c3p0プールは接続を確立できません。これをデバッグする方法は?

    3. トランザクションなしのpython-mysqldb

    4. ClojureMySQLクエリ結果にMが表示されるのはなぜですか