2016-05-09 5 views
0

Ich habe dies:Deklarieren einer Tabellenvariable mit einem Feld, das eine variable

declare @t1 table  
(
    [TableName] [nvarchar](100), 
    [UniqueName] [nvarchar](100), 
    [FieldName] [nvarchar](100), 
    [TransID_1] [nvarchar](2000), 
    [TransID_2] [nvarchar](2000) 
) 

Ich brauche etwas wie folgt aus:

declare @t1 table  
(
    [TableName] [nvarchar](100), 
    [UniqueName] [nvarchar](100), 
    [FieldName] [nvarchar](100), 
    [TransID_'' + @ID1 + ''] [nvarchar](2000), 
    [TransID_'' + @ID2 + ''] [nvarchar](2000) 
) 

, weil die beiden TransID Felder gehen müssen unterschiedliche Zahlen und Die Feldnamen müssen diese Nummern enthalten. Es gibt insgesamt etwa 3000 Zeilen Code und vertraue mir einfach, wenn ich sage, dass ich sie so benennen muss.

Wie auch immer ... Kann dies getan werden? Wenn das so ist, wie?

+0

Warum brauchen Sie dynamische Spaltennamen in einer Tabelle? – Paparazzi

Antwort

2

Sie würden für diese dynamische SQL benötigen, so etwas wie dieses .....

Declare @ID1 varchar(10) = '20' ,@ID2 varchar(10) = '30' 

Declare @Sql Nvarchar(max) 

set @Sql = N'declare @t1 table  
      (
       [TableName] [nvarchar](100), 
       [UniqueName] [nvarchar](100), 
       [FieldName] [nvarchar](100), 
       [TransID_' + @ID1 + '] [nvarchar](2000), 
       [TransID_' + @ID2 + '] [nvarchar](2000) 
      ) 
      select * from @t1' 

Exec sp_executesql @sql 
+0

Eine Sache zu beachten ist, dass @ t1 nur in diesem dynamischen SQL-Teil enthalten sein wird; Sie werden nicht in der Lage sein, es nach dem exec sp_executesql zu referenzieren – LordBaconPants

+0

@LordBaconPants Ich Shuold habe das wirklich in meiner Antwort erwähnt. trotzdem danke, dass du es aufgezeigt hast. –

+0

Ich musste es ein klein wenig anpassen, aber das hat mich in die richtige Richtung gedrängt. Und ich entdeckte das Problem mit dem Oszilloskop und fügte das in meine Optimierung ein. –

Verwandte Themen