我正在尝试创建一个可以创建多个表和存储过程的存储过程,但是在 GO 附近出现了一堆语法不正确的错误
我正在研究一种 C# 方法来调用存储过程。
我的存储过程类似于
CreateTables @name nvarchar(500)
declare @query nvarchar(MAX) =
'use db1
GO
create table '+@name+'_TableA(column1 int, column2 nvarchar(300)) on [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
create table '+@name+'_TableB(column1 nvarchar(500), column2 nvarchar(350)) on [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
use db2
GO
create table '+@name+'_TableC(column1 int, column2 nvarchar(300)) on [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
create table '+@name+'_TableD(column1 nvarchar(500), column2 nvarchar(350)) on [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
create procedure '+@name+'_spA @variable1 int, @variable2 nvarchar(300) as
begin
insert into tableA.....
end
GO
'
exec @query
这是正确的方法吗?
或者,我正在考虑在存储过程中单独执行每个创建语句,但是我需要获取每个语句的结果并将其保存到临时表中,然后在最后返回。
另一种方法是将创建语句硬编码到我的 C# 中并从我的代码中执行每个创建查询,但我理想的解决方案是在一次 SQL 运行中执行所有内容,并获得一个结果集。
我们目前只是手动执行这些查询,但我们希望自动化该过程。
此外,这些是我得到的错误
消息 102,级别 15,状态 1,第 16 行
'GO' 附近的语法不正确。消息 102,级别 15,状态 1,第 26 行
'GO' 附近的语法不正确。
....
Msg 111, Level 15, State 1, Line 106
'CREATE/ALTER PROCEDURE' 必须是查询批处理中的第一条语句。消息 134,级别 15,状态 1,第 122 行
变量名称“@variable1”已被声明。变量名称在查询批处理或存储过程中必须是唯一的。