sql >> Database >  >> RDS >> Sqlserver

Dynamisch SQL Server 2005-draaipunt

Ik heb de laatste tijd een paar te veel van deze dynamische vragen gedaan... (mijn kolommen verschuiven per klant per maand). Hier is een manier om het te doen:niet testen, geen debuggen, er kunnen een paar bugs zijn die opgelost moeten worden:

DECLARE
  @Command     nvarchar(max)
 ,@ColumnList  nvarchar(max)
 ,@OrderId     int
 ,@Debug       bit


--  Build a comman-delimited list of the columns
SELECT @ColumnList = isnull(@ColumnLIst + ',', , '') + ColName
 from dbo.GetTableColumnNames('OrderCash', 2)


--  Insert the list of columns in two places in your query
SET @Command = replace('
SELECT  OrderID, 
        CurrCode + ‘‘GBP CURNCY’‘ AS Ticker, 
        Cash AS Position 
FROM 
( 
    SELECT OrderID, <@ColumnList>
    FROM OrderCash 
) p 
UNPIVOT 
( 
    Cash FOR CurrCode IN  
    (<@ColumnList>) 
) AS unpvt 
WHERE Cash != 0 
And OrderID = @OrderId
', '<@ColumnList>', @ColumnList)


--  Always include something like this!
IF @Debug = 1
    PRINT @Command

--  Using sp_executeSQL over EXECUTE (@Command) allows you execution
--  plan resuse with parameter passing (this is the part you may need
--  to debug on a bit, but it will work)
EXECUTE sp_executeSQL @Command, N'@OrderId int', @OrderId



  1. 2 manieren om alleen de numerieke waarden uit een SQLite-databasekolom te retourneren

  2. Auto-increment wordt niet gereset in MySQL

  3. Voeg array in MySQL-database in met PHP

  4. Hoe dwing je de filestream garbage collector om zijn werk met de hoogste prioriteit af te ronden?