关于sql server通过变量创建数据库表出现错误的问题,求指导!

在sqlserver数据库中,创建表的语句如下:CREATETABLE[dbo].[sggdfby20140425]([hm][nvarchar](500)COLLATE... 在sql server 数据库中,创建表的语句如下:
CREATE TABLE [dbo].[sggdfby20140425](
[hm] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[有效帐务周期标识(ValidBillCyc)] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[id] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[fx] [decimal](18, 0) NULL,
[je] [decimal](18, 2) NULL,
[调整金额(Adjust)] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[原始应收金额(Receivable)] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[是否参与出帐] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[营销方案ID] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[Ilog出费规则] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[营销方案对应的金额,及减免后的金额] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[区域] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]但是我想通过变量来创建该数据库,结果出现错误,我写的语句如下:
declare @j varchar(500),@sql varchar(500)
set @j='20140425'
set @sql=
'CREATE TABLE [dbo].[sggdfby'+@j+'](
[hm] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[有效帐务周期标识(ValidBillCyc)] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[id] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[fx] [decimal](18, 0) NULL,
[je] [decimal](18, 2) NULL,
[调整金额(Adjust)] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[原始应收金额(Receivable)] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[是否参与出帐] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[营销方案ID] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[Ilog出费规则] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[营销方案对应的金额,及减免后的金额] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[区域] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]'
exec(@sql)如以下截图,执行上述语句后出现如下错误

我已经仔细核对了,完全找不出出错的原因,这是什么细节没注意导致的吗?还请各位高手指点一下,谢谢!
展开
 我来答
要个洋气的名字3r
2014-05-21 · 超过18用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:59.9万
展开全部

你好  你有没有试试查查你这个变量sql的字符串长度是不是超过了500呢? 如果超过了的话,估计你这个最终执行的sql语句就会有问题了。


下面这个是我执行的结果,我把你的sql变量打印下来了,你看下。就会发现原因了。别忘了给采纳哈!

追问
啊。。。应该就是这个原因了,你是怎么把语句打印出来的?还有我应该要怎么做才对,要分成几段拼起来吗?求指教。。。
追答
恩 通过 print 函数 + 字符串变量@sql 就可以了,最好是分几段拼接起来,多设两个变量,应该可以的,我刚才没试,你试试看。
可爱的DPS
2014-05-21
知道答主
回答量:1
采纳率:0%
帮助的人:1373
展开全部
//如果表不存在则创建

IF not EXISTS (SELECT name FROM sysobjects

WHERE name =@tablename AND type = 'U')

begin

set@createtable='create table '+ @tablename+' (myname char(2))'

exec(@createtable)

end
追问
我问的不是单纯的怎么creat table,想问的是如果通过变量creat一个连表结构都要进行设定的表,就像我写的上述语句那样,只不过是语句中出现语法错误,我找不出到底是哪里出错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式