如何在MS SQL中生成表?

时间:2015-05-26 11:53:13

标签: sql-server sql-server-2008 sql-server-2005

我需要生成像'test_table_1','test_table_2'这样的表...我做错了什么?

declare @i int = 1;
declare @i_str varchar(1024);
declare @table VARCHAR(1024);


while (@i < 500)
BEGIN
SET @i = @i + 1;
SET @table = 'TEST_TABLE_' + convert(varchar, @i);

IF NOT EXISTS(SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'dbo' 
                 AND  TABLE_NAME = @table) 

CREATE TABLE @table (
	ID INT,
	userid INT,
	name TEXT,
	last_name TEXT,
	country TEXT,
	city TEXT
)

END

错误: @table附近的语法不正确。期待'。',ID或QUOTED_ID

2 个答案:

答案 0 :(得分:0)

这里的问题是临时表使用散列#table。您正试图将该名称作为变量传递。

您可以尝试实现的一种方法是构建创建表字符串

declare @createTable varchar(1000),
    @table varchar(30) = 'table1'
SET @createTable = 'CREATE TABLE #' + @table + ' (ID INT,userid INT,    name TEXT,last_name TEXT,country TEXT,city TEXT)'

EXEC (@createTable)

答案 1 :(得分:0)

如果要创建永久表(而不是临时表),则其中一个选项是使用动态查询。如下所示

 DECLARE  @TableName NVARCHAR(128) DECLARE @Column1Name NVARCHAR(32)
 DECLARE @Column1DataType NVARCHAR(32) DECLARE @Column1Nullable NVARCHAR(32)

 DECLARE @SQLString NVARCHAR(MAX)

 SET @SQLString = 'CREATE TABLE ' + @TableName + '( '+ @Column1Name + '
 ' + @Column1DataType + ' '+ @Column1Nullable +')  ' 
EXEC (@SQLString)