如何在SQL Server中将create table语句设置为变量?

时间:2017-11-09 07:01:11

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

当我用来执行和编写直接表创建查询时,它工作正常。但是,当我将相同的SQL设置为变量然后执行变量时,它会。

EXECUTE ( 'IF NOT EXISTS (SELECT * FROM sys.objects 
                          WHERE object_id = OBJECT_ID(N''DQ_ACC_' + @BUSINESS_NAME + '_OP_BASIC_PROFILE_ENTITY_TREND'') AND type = ''U'')
               CREATE TABLE DQ_ACC_' + @BUSINESS_NAME + '_OP_BASIC_PROFILE_ENTITY_TREND
               (
                   [BUSINESS_NAME] [VARCHAR](200) NULL,
                   [PROFILE_NUM] [INT] NULL,
                   [TABLE_NAME] [VARCHAR](200) NULL,
                   [ATTRIBUTE_COUNT] [INT] NULL,
                   [MIN_ROW_LENGTH] [INT] NULL,
                   [MAX_ROW_LENGTH] [INT] NULL,
                   [NUM_DUPLICATE_RECS] [INT] NULL,
                   [SUMMARY_DETAIL_VIEW] [VARCHAR](100) NULL,
                   [S_KEY] [INT] NULL,
                   [LOAD_TIMESTAMP] [DATETIME] NULL) ON [PRIMARY]'
            );

当我使用set命令分配相同的查询时,它不起作用。

你能告诉我这里我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

试试这个

DECLARE @Qry VARCHAR(MAX) = 'IF OBJECT_ID(N''DQ_ACC_' + @BUSINESS_NAME + '_OP_BASIC_PROFILE_ENTITY_TREND'' ) IS NULL
                            CREATE TABLE DQ_ACC_' + @BUSINESS_NAME + '_OP_BASIC_PROFILE_ENTITY_TREND
                                    (
                                        [BUSINESS_NAME] [VARCHAR](200) NULL,
                                        [PROFILE_NUM] [INT] NULL,
                                        [TABLE_NAME] [VARCHAR](200) NULL,
                                        [ATTRIBUTE_COUNT] [INT] NULL,
                                        [MIN_ROW_LENGTH] [INT] NULL,
                                        [MAX_ROW_LENGTH] [INT] NULL,
                                        [NUM_DUPLICATE_RECS] [INT] NULL,
                                        [SUMMARY_DETAIL_VIEW] [VARCHAR](100) NULL,
                                        [S_KEY] [INT] NULL,
                                        [LOAD_TIMESTAMP] [DATETIME] NULL
                                    ) ON [PRIMARY]'


            );

EXEC(@Qry)

答案 1 :(得分:0)

这里我将值@BUSINESS_NAME设置为1,然后它将生成创建表SQL脚本:

DECLARE @Q NVARCHAR(MAX), @BUSINESS_NAME NVARCHAR(MAX) = '1'

SELECT @Q = N'IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''DQ_ACC_' + @BUSINESS_NAME + '_OP_BASIC_PROFILE_ENTITY_TREND'' 
                                                                 ) AND type = ''U'')
                            CREATE TABLE DQ_ACC_' + @BUSINESS_NAME + '_OP_BASIC_PROFILE_ENTITY_TREND
                                    (
                                        [BUSINESS_NAME] [VARCHAR](200) NULL,
                                        [PROFILE_NUM] [INT] NULL,
                                        [TABLE_NAME] [VARCHAR](200) NULL,
                                        [ATTRIBUTE_COUNT] [INT] NULL,
                                        [MIN_ROW_LENGTH] [INT] NULL,
                                        [MAX_ROW_LENGTH] [INT] NULL,
                                        [NUM_DUPLICATE_RECS] [INT] NULL,
                                        [SUMMARY_DETAIL_VIEW] [VARCHAR](100) NULL,
                                        [S_KEY] [INT] NULL,
                                        [LOAD_TIMESTAMP] [DATETIME] NULL
                                    ) ON [PRIMARY]'



 PRINT @Q
--EXECUTE sp_executesql @Q

但是,如果您没有指定值@BUSINESS_NAME,那么它将不会生成脚本

结果:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'DQ_ACC_1_OP_BASIC_PROFILE_ENTITY_TREND' 
                                                                 ) AND type = 'U')
                            CREATE TABLE DQ_ACC_1_OP_BASIC_PROFILE_ENTITY_TREND
                                    (
                                        [BUSINESS_NAME] [VARCHAR](200) NULL,
                                        [PROFILE_NUM] [INT] NULL,
                                        [TABLE_NAME] [VARCHAR](200) NULL,
                                        [ATTRIBUTE_COUNT] [INT] NULL,
                                        [MIN_ROW_LENGTH] [INT] NULL,
                                        [MAX_ROW_LENGTH] [INT] NULL,
                                        [NUM_DUPLICATE_RECS] [INT] NULL,
                                        [SUMMARY_DETAIL_VIEW] [VARCHAR](100) NULL,
                                        [S_KEY] [INT] NULL,
                                        [LOAD_TIMESTAMP] [DATETIME] NULL
                                    ) ON [PRIMARY]