SQL 建表语句字符串拼接

gzw13999 2014-03-11 08:21:44

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语句中.
...全文
295 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2014-03-12
  • 打赏
  • 举报
回复
可以把@sqlchar的内容打印出来,手工执行看哪里报错,

-- 把exec(@sqlchar)暂时换为如下语句
print @sqlchar
  • 打赏
  • 举报
回复
引用 3 楼 gzw13999 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 动态生成的语句大概就是这样的:
CREATE TABLE [dbo].[completeTopic_2014-03-11](a int,b datetime,c varchar(10))
如果还有索引,也需要加上日期,那么和这个表的名称是一样的,另外,其他的default默认值,都是比较简单的
我这的语句Select出来的没问题 可是EXEC sp_executesql @sqlchar 就这样了 这里是不是需要转义?? [/quote] 这个go,只是在ssms中执行是可以的,但是如果放到语句当中,动态执行会有问题:
exec('select 1; 
      go 
      select 2;')
/*
消息 102,级别 15,状态 1,第 2 行
'go' 附近有语法错误。

*/
直面人生 2014-03-12
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
拼接里面不能用go,你试试这种写法:
DECLARE @sql NVARCHAR(max)
SET @sql='select 1'+CHAR(13)+'go'+CHAR(13)+'select 2'
print(@sql)

/*
select 1
go
select 2
*/
u014000671 2014-03-12
  • 打赏
  • 举报
回复
發糞塗牆 2014-03-12
  • 打赏
  • 举报
回复
拼接里面不能用go,你试试这种写法:
DECLARE @sql NVARCHAR(max)
SET @sql='select 1'+CHAR(13)+'go'+CHAR(13)+'select 2'
print(@sql)

/*
select 1
go
select 2
*/
gzw13999 2014-03-12
  • 打赏
  • 举报
回复
还有GO也报错了
gzw13999 2014-03-12
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
动态生成的语句大概就是这样的:
CREATE TABLE [dbo].[completeTopic_2014-03-11](a int,b datetime,c varchar(10))


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

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

可是EXEC sp_executesql @sqlchar 就这样了


这里是不是需要转义??
  • 打赏
  • 举报
回复
动态生成的语句大概就是这样的:
CREATE TABLE [dbo].[completeTopic_2014-03-11](a int,b datetime,c varchar(10))
如果还有索引,也需要加上日期,那么和这个表的名称是一样的,另外,其他的default默认值,都是比较简单的
  • 打赏
  • 举报
回复
右边少了一个引号,然后得加上括号 和 字段, 修改了一下你的代码,简单的例子:

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)

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧