【发布时间】:2020-08-28 05:19:08
【问题描述】:
我有 10 台数据库服务器,大多数程序都是一样的。 所以我打算做程序分发程序。
为了方便应用,我想使用“工具制作的程序修改代码”本身。 例如,当我点击 SSMS 上程序的修改按钮时,代码如下所示。
USE [DB]
GO
/****** Object: StoredProcedure [dbo].[HongTestProcedure] Script Date: 2020-08-28 오전 11:09:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: hong
-- Create date: 2020-03-07
-- =============================================
ALTER PROCEDURE [dbo].[HongTestProcedure]
-- Add the parameters for the stored procedure here
@ID varchar(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT *
FROM table
END
然后,如果我想修改程序的参数。 也许代码如下:
USE [DB]
GO
/****** Object: StoredProcedure [dbo].[HongTestProcedure] Script Date: 2020-08-28 오전 11:09:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: hong
-- Create date: 2020-03-07
-- =============================================
ALTER PROCEDURE [dbo].[HongTestProcedure]
-- Add the parameters for the stored procedure here
@ID varchar(10)
@ID2 varchar(10) -- it is added.
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT *
FROM table
END
我认为该程序有一个文本框和按钮。 我想插入以上所有代码。 也许它看起来像:
所以,我尝试如下代码:
public bool UpdateProcedure(string dbip, string query)
{
DataSet ds = new DataSet();
SqlConnection sqlConn = new SqlConnection("server = " + dbip + dbInfo);
sqlConn.Open();
SqlCommand sqlComm = new SqlCommand(query, sqlConn);
sqlComm.ExecuteNonQuery();
return true;
}
如果运行成功,我将在 10 个数据库服务器上运行查询。 但它返回错误消息。甚至可以在 SSMS 中运行。
- “GO”附近的语法不正确
- CREATE/ALTER PROCEDURE 必须是查询批处理中的第一条语句
我能解决吗?
【问题讨论】:
-
为什么要自己动手?为什么不使用像DbUp 或RoundhousE 这样的成熟、久经考验、经过验证的解决方案,而不是重新发明轮子?
-
"GO" 不是 SQL 命令,它是特定于 SSMS 的分隔符
标签: sql sql-server stored-procedures ssms