日期:2014-05-16  浏览次数:20449 次

SQL 建表语句字符串拼接
本帖最后由 gzw13999 于 2014-03-11 20:22:47 编辑

DECLARE @datechar varchar(10)
SET @datechar= CONVERT(varchar(10), GETDATE(), 23)

CREATE TABLE [dbo].[completeTopic_'+@datechar+']


表名后面加个日期后缀.

如果把语句放进nvarchar中
SET @sqlchar='CREATE TABLE [dbo].[completeTopic_'+@datechar+']

会有错误提示会提示 Incorrect syntax near the keyword 'CREATE'.

建表的语句包括索引 约束 默认值 索引名字也是有日期后缀的,怎么拼接一个日期字符串到SQL语句中.
------解决方案--------------------
右边少了一个引号,然后得加上括号 和 字段,

修改了一下你的代码,简单的例子:


DECLARE @datechar varchar(10)
declare @sqlchar nvarchar(1000)

SET @datechar= CONVERT(varchar(10), GETDATE(), 23)


SET @sqlchar='CREATE TABLE [dbo].[completeTopic_'+@datechar+'](' +
             'a int,b datetime,c varchar(10)'+
             ')'

select @sqlchar

--exec(@sqlchar)

------解决方案--------------------
拼接里面不能用go,你试试这种写法:
DECLARE @sql NVARCHAR(max)
SET @sql='select 1'+CHAR(13)+'go'+CHAR(13)+'select 2'
print(@sql)

/*
select 1
go
select 2
*/

------解决方案--------------------
引用:
Quote: 引用:

动态生成的语句大概就是这样的:
CREATE TABLE [dbo].[completeTopic_2014-03-11](a int,b datetime,c varchar(10))


如果还有索引,也需要加上日期,那么和这个表的名称是一样的,另外,其他的default默认值,都是比较简单的

我这的语句Select出来的没问题

可是EXEC sp_executesql @sqlchar 就这样了


这里是不是需要转义??


这个go,只是在ssms中执行是可以的,但是如果放到语句当中,动态执行会有问题:
exec('select 1; 
      go 
      select 2;')
/*
消息 102,级别 15,状态 1,第 2 行
'go' 附近有语法错误。

*/

------解决方案--------------------
可以把@sqlchar的内容打印出来,手工执行看哪里报错,

-- 把exec(@sqlchar)暂时换为如下语句
print @sqlchar