【发布时间】:2009-01-27 15:17:09
【问题描述】:
知道是否可以单独使用 T-SQL 在另一个数据库中创建一个过程,其中数据库的名称事先不知道并且必须从表中读取?有点像这个例子:
Use [MasterDatabase]
Declare @FirstDatabase nvarchar(100)
Select Top 1 @FirstDatabase=[ChildDatabase] From [ChildDatabases]
Declare @SQL nvarchar(4000)
Declare @CRLF nvarchar(10) Set @CRLF=nchar(13)+nchar(10)
Set @SQL =
'Use [+'@Firstdatabase+']'+@CRLF+
'Go'+@CRLF+
'Create Proc [Test] As Select 123'
Exec (@SQL)
看看我在做什么?此示例失败,因为 Go 实际上不是 T-SQL 命令,而是查询分析器/SQL 管理工作室识别的内容并产生错误。删除 Go,它也失败了,因为 Create Proc 必须是脚本的第一行。啊!!
T-SQL 的语法不允许你做这样的事情:
创建 [OtherDatabase].[dbo].[Test]
这是一种耻辱,因为它会起作用!你可以用 Select 语句做到这一点,可惜它不一致:
Select * From [OtherDatabase]..[TheTable]
干杯,罗伯。
【问题讨论】:
-
如果你先用 exec 改变数据库,然后再用 exec 你的存储过程呢?
-
我也会这样做:首先发送“go”之前的部分,然后(在第二个 SQL 语句中)发送“create proc...”
标签: sql-server tsql stored-procedures