gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:33:51 25 4
gpt4 key购买 nike

您是否知道是否可以单独使用 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 的语法不允许您执行以下操作:

创建[其他数据库].[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)

关于sql-server - 在另一个数据库中创建存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com