设为首页 - 加入收藏 华夏网 ()- 云主机,资讯,互联网,人工智能,云计算,大赢家论坛,区块链,VR,站长网!
热搜: 芯片 什么 市场 2017
当前位置: 主页 > 水果奶奶论坛 > 正文

sql-server – 在另一个数据库中创建存储过程

发布时间:2021-04-04 13:23 所属栏目:[水果奶奶论坛] 来源:网络整理
导读:任何想法是否可以单独使用T-SQL在另一个数据库中创建一个过程,其中数据库的名称是预先知道的并且必须从表中读取?有点像这个例子: Use [MasterDatabase]Declare @FirstDatabase nvarchar(100)Select Top 1 @FirstDatabase=[ChildDatabase] From [ChildDataba

任何想法是否可以单独使用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必须是脚本的第一行. Arrgg!

T-SQL的语法不允许你这样做:

创建[OtherDatabase].[dbo].[测试]

这是一种耻辱,因为它会起作用!你可以用Select语句做到这一点,耻辱它是不一致的:

选择*来自[OtherDatabase] .. [TheTable]

干杯,罗布.

解决方法

这是一种痛苦,但这就是我所做的.我从我在sqlteam上找到的一个例子中得到了这个,我想 – 你可能有一些引用问题与我做不加区分的REPLACE的方式:
DECLARE @sql AS varchar(MAX)
DECLARE @metasql as varchar(MAX)
DECLARE @PrintQuery AS bit
DECLARE @ExecQuery AS bit

SET @PrintQuery = 1
SET @ExecQuery = 0

SET @sql = 
'
CREATE PROCEDURE etc.
AS
BEGIN
END
'

SET @metasql = '
USE OtherDatabase
EXEC (''' + REPLACE(@sql,'''','''''') + ''')
'

IF @PrintQuery = 1
    PRINT @metasql
IF @ExecQuery = 1
    EXEC (@metasql)

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章