麻烦帮我看一下什么错误?

xujinli88 2011-12-07 04:17:29
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: xujinli
-- Create date: 2011-12-7
-- Description: 创建数据库和表
-- =============================================
CREATE PROCEDURE P_Create
--@year nvarchar(100)//这样的写法是传进来的参数
AS
declare @year nvarchar(100),
@KuName nvarchar(200)
BEGIN
select @year=YEAR(getdate()),
@KuName='XQ_'+Cast(YEAR(getdate()) as nvarchar(50))

if exists(select * from sys.databases where [name]=@KuName ) --判断该数据是否存在
print '该数据库已经存在'
else
begin
create database @KuName --创建数据库名为:@KuName on primary
(name=@KuName,
filename='D:\Project\DataBase\'+@KuName+'.mdf',
size=20,
filegrowth=10%
), --创建日志,只有一个主数据文件@KuName.mdf
log on
(name=@KuName,
filename='D:\Project\DataBase\'+@KuName+'.ldf',
size=20,
filegrowth=10%
)
end

END
GO
红色的部分说是有语法错误 why
...全文
72 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xujinli88 2011-12-08
  • 打赏
  • 举报
回复
谢谢哦 明白了
唐诗三百首 2011-12-07
  • 打赏
  • 举报
回复
不需要"go", 删除即可.

请看10楼代码.
xujinli88 2011-12-07
  • 打赏
  • 举报
回复
alter proc P_create
as
declare @year nvarchar(100)
declare @KuName nvarchar(200)
begin
begin transaction
select @year=cast(YEAR(getdate()) as nvarchar),
@KuName='XQ_'+Cast(YEAR(getdate()) as nvarchar(50))

if exists(select * from sys.databases where [name]=@KuName ) --判断该数据是否存在
print '该数据库已经存在'
else
begin
declare @sql varchar(5000)

select @sql='create database '+@KuName+' ON PRIMARY '
+'(name='''+@KuName+''',filename=''D:\Project\DataBase\'+@KuName+'.mdf'', '
+'size=20,filegrowth=10%) log on(name='''+@KuName+'_log'','
+'filename=''D:\Project\DataBase\'+@KuName+'.ldf'',size=20,filegrowth=10%)'
exec(@sql)
declare @sqltable varchar(5000)
select @sqltable=' use '+@KuName+' go '
+' CREATE TABLE [dbo].[TB_RealData]('+
+' [Company_Code] [nchar](30) COLLATE Chinese_PRC_CI_AS NOT NULL,'
+' [Real_Data] [varchar](800) COLLATE Chinese_PRC_CI_AS NOT NULL,'
+' [Real_Date] [datetime] NULL,'
+' [Real_Type] [varchar](2) COLLATE Chinese_PRC_CI_AS NULL,'
+' [Real_Remark] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL'
+' ) ON [PRIMARY]'
exec(@sqltable)
end
commit transaction /*提交事务*/
end
这个地方有错误 ?
唐诗三百首 2011-12-07
  • 打赏
  • 举报
回复

-- 在存储过程中,建完数据库后执行.
exec('use '+@KuName+' create table [表名]([字段名] [数据类型]...)')
xujinli88 2011-12-07
  • 打赏
  • 举报
回复
是接着上面的代码
xujinli88 2011-12-07
  • 打赏
  • 举报
回复
那我想在创建表的同时给这个数据库加一张表 怎么加啊 请您指点
clicsullivan 2011-12-07
  • 打赏
  • 举报
回复
要用动态语句创建库表
唐诗三百首 2011-12-07
  • 打赏
  • 举报
回复
不行,一定要用动态SQL,举个最简单的例子,

-- 建测试库,正常.
create database abcd

-- 删除测试库,正常.
drop database abcd

-- 用变量做库名,出错.
declare @KuName nvarchar(50)
select @KuName='abcd'
create database @KuName

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near '@KuName'.
xujinli88 2011-12-07
  • 打赏
  • 举报
回复
我上面的不能用吗
唐诗三百首 2011-12-07
  • 打赏
  • 举报
回复
用要动态SQL,

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: xujinli
-- Create date: 2011-12-7
-- Description: 创建数据库和表
-- =============================================
create procedure P_Create
--@year nvarchar(100)//这样的写法是传进来的参数
AS
declare @year nvarchar(100),
@KuName nvarchar(200)
BEGIN
select @year=cast(YEAR(getdate()) as nvarchar),
@KuName='XQ_'+Cast(YEAR(getdate()) as nvarchar(50))

if exists(select * from sys.databases where [name]=@KuName ) --判断该数据是否存在
print '该数据库已经存在'
else
begin
declare @sql varchar(5000)
select @sql='create database '+@KuName+' ON PRIMARY '
+'(name='''+@KuName+''',filename=''D:\Project\DataBase\'+@KuName+'.mdf'', '
+'size=20,filegrowth=10%) log on(name='''+@KuName+'_log'','
+'filename=''D:\Project\DataBase\'+@KuName+'.ldf'',size=20,filegrowth=10%)'

exec(@sql)

end

END
go
mustudent 2011-12-07
  • 打赏
  • 举报
回复
这个得拼SQL语句吧。
--小F-- 2011-12-07
  • 打赏
  • 举报
回复
用变量创建数据库?
-晴天 2011-12-07
  • 打赏
  • 举报
回复
create database 后面要加实际的名称,不能用变量.

22,210

社区成员

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

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