动态sql语句问题

DataBox-MDX 2011-10-26 10:39:48

USE MyDB
GO
CREATE PROC [dbo].[test]
AS
BEGIN
PRINT 'HI'
END

这段sql单独拿出来执行没问题,执行结果在MyDB中建立了一个存储过程。
但是。

declare @sql nvarchar(max)
set @sql=''
set @sql='
USE MyDB
GO
CREATE PROC [dbo].[test]
AS
BEGIN
PRINT ''HI''
END
'
错误信息:
消息 102,级别 15,状态 1,第 1 行
'GO' 附近有语法错误。
消息 111,级别 15,状态 1,第 7 行
'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。

如果我先执行
[code=SQL]
set @sql=N'
USE MyDB

exec @sql

然后再执行

set @sql=N'
CREATE PROC [dbo].[test]
AS
BEGIN
PRINT ''HI''
END
'
exec @sql

那么该存储过程会建立在Master.
而我想将该存储过程建立在MyDB上,请高手赐教。

[/code]
...全文
114 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniuswjt 2011-10-27
  • 打赏
  • 举报
回复
动态语句一般不是干这事用的吧。。。
唐诗三百首 2011-10-27
  • 打赏
  • 举报
回复
想不出来, 敢问这是什么需求喔?
中国风 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 roy_88 的回复:]

SQL code
declare @sql nvarchar(max)
set @sql=''
set @sql='
CREATE PROC MyDB.[dbo].[test]
AS
BEGIN
PRINT ''HI''
END
'
exec(@sql)
[/Quote]

不好意思,搞錯


這樣實現
在MyDB創建執行的存儲過程如:

USE MyDB
go
CREATE PROC P2
(@sql NVARCHAR(1000)
)AS
EXEC(@sql)


--調用方法
USE master
go
declare @sql nvarchar(max)
set @sql=''
set @sql=
'
CREATE PROC [dbo].[test]
AS
BEGIN
PRINT ''HI''
END
'

EXEC MyDB.dbo.P2 @sql
怪众生太美丽 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 roy_88 的回复:]
SQL code

declare @sql nvarchar(max)
set @sql=''
set @sql='
CREATE PROC MyDB.[dbo].[test]
AS
BEGIN
PRINT ''HI''
END
'
exec(@sql)
[/Quote]

查询是可以指定数据库进行查询,在建立存过时貌似这样不行;
--可在MyDB创建存过:
CREATE PROC [dbo].[test]
AS
BEGIN
PRINT 'HI'
END
--然后在MASTER调用存过执行
EXECUTE MyDB.[dbo].[test]
-晴天 2011-10-26
  • 打赏
  • 举报
回复
USE MyDB

declare @sql nvarchar(max)
set @sql='
CREATE PROC [dbo].[test]
AS
BEGIN
PRINT ''HI''
END
'
exec(@sql)


是不会把过程写到 master里的,而肯定是在mydb中.
中国风 2011-10-26
  • 打赏
  • 举报
回复
MyDB.[dbo].[test]--在存储过程名这里加上DB名
中国风 2011-10-26
  • 打赏
  • 举报
回复
declare @sql nvarchar(max)
set @sql=''
set @sql='
CREATE PROC MyDB.[dbo].[test]
AS
BEGIN
PRINT ''HI''
END
'
exec(@sql)
中国风 2011-10-26
  • 打赏
  • 举报
回复
GO 
CREATE PROC MyDB.[dbo].[test]
AS
BEGIN
PRINT ''HI''
END
'
--小F-- 2011-10-26
  • 打赏
  • 举报
回复
if object_id('test') is not null
drop proc test
CREATE PROC [dbo].[test]
AS
BEGIN
PRINT ''HI''
END

22,210

社区成员

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

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