sql >> Database >  >> RDS >> Sqlserver

Dynamische SQL gebruiken om een ​​kolomnaam op te geven door een variabele toe te voegen aan een eenvoudige SQL-query

Als u de kolomnaam dynamisch probeert op te geven, kunt u kijken naar het uitvoeren van dynamische sql. Zorg er echter voor dat u eerst de gevaren van deze aanpak leest:

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

Van die pagina is er een voorbeeld dat laat zien hoe de tabelnaam dynamisch wordt gespecificeerd -- je zou het kunnen veranderen zodat het in plaats daarvan dynamisch de kolomnaam specificeert:

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

Dus als u bijvoorbeeld een tabel 'MijnTabel' had met kolommen met de namen 'x', 'y' en 'z', zou deze er als volgt kunnen uitzien:

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. Een varchar-kolomtype converteren naar een datumtype zonder de datums te verliezen

  2. Voeg NULL in een PostgreSQL DB via PHP wanneer een datumveld leeg is

  3. Bekijk isolatieniveau voor een query in mysql

  4. Hoe MySQL te beveiligen:deel twee