SQL Server 存储过程当中给定参数@DBName和@TableName怎样判断@TableName是否存在.......

wxm3630478 2009-04-13 10:45:03

Create PROCEDURE [dbo].[Pro_CreateDBTable]
@DBName nvarchar(100),
@DBTabName nvarchar(100)
AS
BEGIN
declare @sql nvarchar(max)
if exists(select name from master.dbo.sysdatabases where name = @DBName) --判断数据库是否存在
Begin
if(--是否存在表--) --如何判断是否存在这个表,不存在则创建@DBTabName
Begin
set @sql='create table '+@DBName+' .dbo.'+@DBTabName+'([ID] [bigint] IDENTITY(1,1) not null) ON [PRIMARY]'
Exec(@sql)
return 1
End
End
else
return 0
END

数据库名是个参数,我不知道怎么搞了............请高手帮忙呀,谢谢了 !
...全文
274 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxkid 2009-04-13
  • 打赏
  • 举报
回复

Create PROCEDURE [dbo].[Pro_CreateDBTable]
@DBName nvarchar(100),
@DBTabName nvarchar(100)
AS
BEGIN
declare @sql nvarchar(max)
if exists(select name from master.dbo.sysdatabases where name = @DBName) --判断数据库是否存在
Begin
if(OBJECT_ID(@DBName + '.dbo.' + @DBTabName) = NULL)
Begin
set @sql='create table '+@DBName+' .dbo.'+@DBTabName+'([ID] [bigint] IDENTITY(1,1) not null) ON [PRIMARY]'
Exec(@sql)
return 1
End
End
else
return 0
END
wxm3630478 2009-04-13
  • 打赏
  • 举报
回复
谢谢 ,终于有人明白我的意思了............
zxkid 2009-04-13
  • 打赏
  • 举报
回复
用一个OBJECT_NAME ( object_id [, database_id ] )就可以搞定了
playwarcraft 2009-04-13
  • 打赏
  • 举报
回复


Create PROCEDURE [dbo].[Pro_CreateDBTable]
@DBName nvarchar(100),
@DBTabName nvarchar(100)
AS
declare @sql nvarchar(1000)
if exists(select name from master.dbo.sysdatabases where name = @DBName) --判断数据库是否存在
Begin
declare @check nvarchar(1000), @cnt int
set @check='select @cnt=count(*) from '+@DBName+'.dbo.sysobjects where name='''+@DBTabName+''' and xtype=''U'''
exec sp_executesql @check,N'@cnt int output',@cnt output
if @cnt=0
Begin
set @sql='create table '+@DBName+' .dbo.'+@DBTabName+'([ID] [bigint] IDENTITY(1,1) not null) ON [PRIMARY]'
Exec(@sql)
return 1
End

End
else
return 0

wxm3630478 2009-04-13
  • 打赏
  • 举报
回复
问题还没解决了.................上面的都理解错了我的意思了。大家帮忙帮顶吧!谢谢

我是要判断@DBName(某个数据库未知) 中是否有@DBTabName这个表 而不是当前数据库

@DBName----数据库名
@DBTabName ---表名

1、先判断是否有这个数据库【@DBName】
2、判断【@DBName】数据库中是否有这个表【@DBTabName】
3、没有则创建【@DBTabName】表

没人知道的话,我就在程序中控制去了..
wxm3630478 2009-04-13
  • 打赏
  • 举报
回复
我是要判断 另外一个数据库中是否有 这个表,数据库名称是我传进去@DBName

我是要判断@DBName(某个数据库未知) 中是否有@DBTabName这个表 而不是判断当前写存储过程的这个数据库中是否存在@DBTabName

dbo.sysobjects 只能查询【当前数据库】

【数据库名】.dbo.sysobjects 是查询指定数据库当中的某个表等等

现在我的问题是我的数据库名称是个参数 我不知道怎么搞了..........

if not exists(select name from 【数据库名】.dbo.sysobjects where name='@DBTabName')
hongqi162 2009-04-13
  • 打赏
  • 举报
回复
导出建库脚本粘贴到里面就行,判断什么的脚本都有
goldxinx 2009-04-13
  • 打赏
  • 举报
回复

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[@DBName]') AND type in (N'U'))
moonshineidolon 2009-04-13
  • 打赏
  • 举报
回复
Create PROCEDURE [dbo].[Pro_CreateDBTable]
@DBName nvarchar(100),
@DBTabName nvarchar(100)
AS
BEGIN
declare @sql nvarchar(max)
if exists(select name from master.dbo.sysdatabases where name = @DBName) --判断数据库是否存在
Begin
if not exists (select * from dbo.sysobjects where id = object_id(N'['+@DBTabName+']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
Begin
set @sql='create table '+@DBName+' .dbo.'+@DBTabName+'([ID] [bigint] IDENTITY(1,1) not null) ON [PRIMARY]'
Exec(@sql)
return 1
End
End
else
return 0
END
wartim 2009-04-13
  • 打赏
  • 举报
回复
其实你sql企业管理器里表生成sql脚本就能看到标准写法
zabcd117 2009-04-13
  • 打赏
  • 举报
回复
看看这段代码

if exists (select 1 from sysobjects where [id] = object_id('TableName') and OBJECTPROPERTY([id], N'IsUserTable') = 1)
print 'table exists'
wartim 2009-04-13
  • 打赏
  • 举报
回复

if exists (select * from dbo.sysobjects where id = object_id(N'['+@DBTabName+']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
FenixeVon 2009-04-13
  • 打赏
  • 举报
回复
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[Table1]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
CREATE TABLE [dbo].[Table1]()
END
wxm3630478 2009-04-13
  • 打赏
  • 举报
回复
晕。。没人帮忙呀。。。顶下也可以呀!!!!!!!
wxm3630478 2009-04-13
  • 打赏
  • 举报
回复
谢谢了.........
zxkid 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 playwarcraft 的回复:]
但是object_id('object') 返回不是null,不一定代表object就是table ,有可能是store procedure等其他object
[/Quote]

if(OBJECT_ID(@DBName + '.dbo.' + @DBTabName, 'U') IS NULL) 就可以了

OBJECT_ID也可以带对象类型 'U'表示用户
对,要用IS NULL判断,不小心搞错了
playwarcraft 2009-04-13
  • 打赏
  • 举报
回复
但是object_id('object') 返回不是null,不一定代表object就是table ,有可能是store procedure等其他object
playwarcraft 2009-04-13
  • 打赏
  • 举报
回复
if(OBJECT_ID(@DBName + '.dbo.' + @DBTabName) = NULL)

==>

sql 判斷是用 is null

if(OBJECT_ID(@DBName + '.dbo.' + @DBTabName) is NULL) 就可以了

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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