为某些表中的行生成字符串处理

时间:2013-08-22 09:15:56

标签: sql sql-server tsql sql-server-2012

我已经有了用于创建SQL表的列和过程的表:

DECLARE @SQLString NVARCHAR(MAX)
SELECT @SQLString =
    '
    '+ ColName + ' ' + ColType + ' '+ ColNullable + ',
    '
FROM FS_Report_Tables WHERE TableId = 0

PRINT ('CREATE TABLE '+ 'Test' + @SQLString)
EXEC ('CREATE TABLE '+ 'Test' + @SQLString)

当我需要所有内容时,当前代码仅打印最后一列(最后没有昏迷)

数据表示例:

ColumnId    TableId ColName ColType ColNullable
1   0   A   int NOT NULL
2   0   B   int NOT NULL

如何使用来自另一个表的SQLString中的节点构建SELECT

2 个答案:

答案 0 :(得分:1)

DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString = 'CREATE TABLE '+ @TableName +  
'
( '+@Column1Name+' '+@Column1DataType +' '+@Column1Nullable +') 

'

PREPARE stmt FROM @SQLString;
 EXECUTE stmt;
 DEALLOCATE PREPARE stmt;

您需要使用prepared statements

SQL Server为您提供了一个存储过程sp_executesql,它将为您执行此任务

答案 1 :(得分:1)

请尝试:

DECLARE @SQLString NVARCHAR(MAX)
SELECT 
  @SQLString = COALESCE(@SQLString + ', ', '') + ColName + ' ' + ColType + ' ' + ColNullable
from 
  YourTable
select @SQLString

EXEC ('CREATE TABLE YourTableName (' + @SQLString + ')')
相关问题