Sql 声明具有变量字段的表变量

Sql 声明具有变量字段的表变量,sql,sql-server,Sql,Sql Server,我有这个: declare @t1 table ( [TableName] [nvarchar](100), [UniqueName] [nvarchar](100), [FieldName] [nvarchar](100), [TransID_1] [nvarchar](2000), [TransID_2] [nvarchar](2000) ) 我需要这样的东西: declare @t1 table ( [T

我有这个:

declare @t1 table       
(
    [TableName] [nvarchar](100), 
    [UniqueName] [nvarchar](100), 
    [FieldName] [nvarchar](100), 
    [TransID_1] [nvarchar](2000), 
    [TransID_2] [nvarchar](2000)
)
我需要这样的东西:

declare @t1 table       
(
    [TableName] [nvarchar](100), 
    [UniqueName] [nvarchar](100), 
    [FieldName] [nvarchar](100), 
    [TransID_'' + @ID1 + ''] [nvarchar](2000), 
    [TransID_'' + @ID2 + ''] [nvarchar](2000)
)
因为两个TransID字段将有不同的数字,字段名需要包含这些数字。总共大约有3000行代码,当我说需要这样命名时,请相信我


无论如何。。。这能做到吗?如果是这样的话,怎么做?

您需要动态sql来实现这一点,比如

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 

您需要使用动态sql来实现这一点,比如

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 

需要注意的是@t1将只在动态SQL部分的作用域中;执行sp后,您将无法引用它_executesql@LordBaconPants我在回答中确实提到了这一点。不管怎样,谢谢你指出了这一点。我不得不稍微调整它以适应,但这把我推向了正确的方向。我发现了范围问题,并将其包含在我的调整中;执行sp后,您将无法引用它_executesql@LordBaconPants我在回答中确实提到了这一点。不管怎样,谢谢你指出了这一点。我不得不稍微调整它以适应,但这把我推向了正确的方向。我发现了范围问题,并将其包含在我的调整中。为什么表中需要动态列名?为什么表中需要动态列名?