日期:2014-05-18  浏览次数:20372 次

急!超难存储过程添加问题,强人进!
如何在.net资源中嵌入SQL脚本资源?SQL中包括多个存储过程,执行时出现了CREATE   PROCEDURE必须时批查询第一行的错误,我现在只能将存储过程每个分拆成SQL文件再嵌入,很是难以维护,由谁能解此难题?在线等,另:SQL2000

------解决方案--------------------
go
------解决方案--------------------
在每个CREATE PROCEDURE前加GO
------解决方案--------------------
go Create procedure
------解决方案--------------------
如果全部是存储过程的话,在每个存储过程后面加go就可以了.

------解决方案--------------------
你不能把sql语句构成字符串传给sql server去执行吗.
------解决方案--------------------
.net以前用过,忘的差不多了,你可以把整个要执行的sql代码赋给一个字符串,然后像提交insert/update语句那样交给数据库去执行.
------解决方案--------------------
如果不能用GO的话,那是不是要用;呢
------解决方案--------------------
你把SQL腳本轉成字串,是不能直接執行的.
比如
create proc A as select 1 GO create proc B as select2 在SQL中編譯通不過,
而用
create proc A as select 1
GO
create proc B as select 2 可以執行.(好像是換行回車的問題,具體偶也不懂)

//個人覺得可以使用變通的方法,比如你的sql腳本改成如下樣子,
即在每個proc結束後,go前加空格,使用--注釋,後加分號;

create proc A as select 1
GO
--;
create proc B as select 2
GO
--;
create proc C as select 3
GO
--;
create proc D as select 4
GO

//在.net程式中,讀成string,使用split方式分隔,循環執行,比如在C#中:

SqlConnection sc=new SqlConnection( ".... ");
SqlDataAdapter da=new SqlDataAdapter();

string sql= "create proc A as select 1 GO --;create proc B as select 2 GO --;create proc C as select 3 GO --;create proc D as select 4 GO ";

string[] arr = sql.Split(new char[]{ '; '});
sc.Open()
for (int i=0;i <arr.Length;i++)
{
da.SelectCommand=new SqlCommand(arr[i].ToString(),sc);
da.SelectCommand.ExecuteNonQuery();
}
sc.Close();
------解决方案--------------------
调用isql也是一个办法。
运行时把资源提取出来存成一个临时文件,然后调用isql执行,但这须要运行的机器上有sql客户端.