【发布时间】:2013-04-07 17:11:38
【问题描述】:
我正在尝试通过构建动态查询并将其存储在变量中并执行该变量来编写一个简单的 SP。
我目前收到以下错误:
消息 206,第 16 级,状态 2,第 16 行
操作数类型冲突:datetime2 与 float 不兼容
对于以下代码:
DECLARE
@table_Num
@1 varchar(100) = 'boo',
@2 int =2,
@3 varchar(100) ='default',
@4 varchar(50) = NULL,
@5 int =NULL,
@6 float =12,
@7 datetime2(0) ='1970-01-01 00:00:00',
@8 datetime2(0)='1970-01-01 00:00:00',
@9 varchar(50)='',
@10 varchar(50)=NULL,
@11 decimal(18,0)=0000000000000,
@12 int =999999
DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString = 'INSERT INTO abc_'+@table_Num+'(col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12)
VALUES ('+@1+',2,'+@3+','+@4+','+@5+','+@6+','+@7+','+@8+','+@9+','+@10+','+@11+','+@12+')'
EXEC (@SQLString)
据我所知,变量的类型与表列类型相同。有什么想法吗?
【问题讨论】:
-
你能把
table_1的定义也包括进来吗? -
这是构建动态 SQL 字符串的最糟糕的方法。你能解释一下为什么它首先需要动态 SQL 吗?
-
@AaronBertrand 好点子。我只是想当然地认为这是动态 SQL 的原因。
-
我认为它必须是动态 sql,因为我需要将参数放在插入语句中
-
@Fearghal 您可以直接在插入语句中调用参数/变量。无需使用动态 SQL,除非您每次都构建不同的插入语句(例如省略某些参数等)
标签: sql sql-server sql-server-2008 tsql dynamic