2013-09-25 35 views
3

我想将236个int值存储到sql中的一行中。现在我必须声明表格,但是我不想输入236倍的列名。列名应该是BYTE001,BYTE002,或其他前缀BYTE(B,INT,...)。 可以自动生成ColumnNames吗?自动创建具有n个列的表格

我试试下面的代码,但它不工作:

USE dbXXX 
DECLARE @Columname varchar(10) 
SET @Columname = 'BYTE011' 
ALTER table tbl_Archiv_BYTEsps 
ADD @Columname int; 

我要生成一个while循环的列名,但似乎不允许使用变量与ADD-命令。我alwasys得到错误:'@Columname'附近的错误语法 我该怎么做才能生成表格?或者有另一种方法来存储我的236整数值?

+0

此表代表什么实体?所有的行都有236个非空值吗?订单重要吗?即“BYTE001”与“BYTE236”是否可以互换?另外,如果值是字节将'BINARY(236)'成为你所需要的? –

回答

0

您需要使用动态sql来执行此查询。

DECLARE @query VARCHAR(MAX) 

SET @query='ALTER table tbl_Archiv_BYTEsps ADD '[email protected]+' int' 
EXEC (@query) 

但我认为最好查看一下你的表结构,因为它似乎有点混乱,为一张表维护236列。

3

尝试这一个 -

IF OBJECT_ID ('dbo.temp') IS NOT NULL 
    DROP TABLE dbo.temp 

DECLARE @SQL NVARCHAR(MAX) 
SELECT @SQL = 'CREATE TABLE dbo.temp (ID INT IDENTITY(1,1) PRIMARY KEY, ' + STUFF((
    SELECT ', BYTE' + RIGHT('000' + CAST(sv.number AS VARCHAR(3)), 3) + ' INT' 
    FROM [master].dbo.spt_values sv 
    WHERE sv.[type] = 'p' 
     AND sv.number BETWEEN 1 AND 236 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')' 

PRINT @SQL 
EXEC sys.sp_executesql @SQL 

输出 -

CREATE TABLE dbo.temp (ID INT IDENTITY(1,1) PRIMARY KEY, BYTE001 INT, BYTE002 INT, BYTE003 INT, BYTE004 INT, BYTE005 INT, BYTE006 INT, BYTE007 INT, BYTE008 INT, BYTE009 INT, BYTE010 INT, BYTE011 INT, BYTE012 INT, BYTE013 INT, ... , BYTE235 INT, BYTE236 INT) 
2

现在,我写了这个代码:

USE sip_audi_01 
DECLARE @Columname varchar(10) 
DECLARE @integer int 
DECLARE @query VARCHAR(MAX) 
SET @integer = 0 
SET @Columname = 'BYTE' 
SET @query='ALTER table tbl_Archiv_BYTEsps ADD '[email protected]+' int' 
WHILE @integer = 235 
BEGIN 
    SET @integer = @integer + 1 
    SET @Columname = @Columname + CAST(@integer AS char) 
    EXEC (@query) 
    PRINT 'Nummer:' + CAST(@integer AS char) 
END; 

,但什么也没有发生....在那里我可以读在SQL Server Server Management Studio中打印输出? @Devart,抱歉,但你的代码对我来说太难了。

相关问题