当我用来执行和编写直接表创建查询时,它工作正常。但是,当我将相同的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命令分配相同的查询时,它不起作用。
你能告诉我这里我做错了什么吗?
答案 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]