Usuário com melhor resposta
Função Sql para rodar script's em geral... URGENTE

Pergunta
-
Boa noite,
Criei uma funçãoSql para executar comandos diversos no banco. Mas depedendo do comando, tipo um script de alteração em uma tabela no banco, a função não consegue executar, sendo que no query analyzer funciona corretamente!
A função:
public
static object mtdSqlExec(string pcNomServ, string pcNomBanc, string pcCmdSql, IsolationLevel pcIsoLevel){
cn.ConnectionString =
"Persist Security Info=False;" +{
cn.Open();
sqlTr.Commit();
loReturn = cmd.ExecuteNonQuery();
cn.Close();
}
catch (SqlException e){
loReturn = (
}
}
Script:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
ALTER TABLE dbo.Vendas ADD
CodVenda int NOT NULL CONSTRAINT DF_Vendas_CodVenda DEFAULT 0
GO
COMMIT
Mensagem de Erro:
Server: Msg 170, Level 15, State 1, Line 14
Line 14: Incorrect syntax near 'GO'.
Resumindo, estou criando uma solução para rodar qualquer tipo de script no banco! Como se fosse um Query Analyzer, e coloquei essa pergunta aqui porque já a fiz várias vezes nu forum C# e nunca fui respondido!!!
Muito Obrigado,
Aguardo resposta...
Vinícius Oliveira e Marra
Respostas
-
Olá Vinícius,
Como dá para ver na mensagem de erro, o problema está no GO. Ele só é reconhecido pelo Query Analyzer e pelo comando (no DOS) OSQL.
O GO é colocado no script para fazer a execução em lotes, e algumas instruções não podem ser executadas no mesmo lote.
Como solução, eu diria para você dividir os scripts no momento que for encontrado um GO. Não sou programador, mas vou tentar exemplificar:
-> Abre sessão com SQL
-> Executa parte antes do GO
-> Executa parte depois do GO
-> Fecha sessão
Assim deve funcionar perfeitamente, e tudo controlado pela sua aplicação, sem fazer nada no SQL.
Abraço!!!
-
alleolli,
Não é tão simples assim. Existem instruções que não podem ser executadas em conjunto (no mesmo lote), faça um teste rodando o seguinte script, todo ele:
Code Snippet-- inicio da primeira view
create
view dbo.V1as
select
* from teste-- fim da primeira view
-- inicio da segunda view
create
view dbo.V2as
select
* from teste-- fim da segunda view
Vai dar erro. Por isso dei a idéia de quebrar o script em vários usando como separador o GO.
Abraço!!!
-
Olá Pessoal
eu Fiz uma Forma de Executar um Script Por Blocos Mesmo que ele Tenha 'GO'
Dessa Forma podemos Executar Um Script Gerado Pelo 'SQL Manager for SQL Server' Sem Problemas
Exemplo de Script: ("C:\Banco.sql")
Code SnippetCREATE TABLE [dbo].[credito] (
[id_credito]int IDENTITY(1, 1) NOT NULL,
[id_nota_fiscal]int NULL,
[id_centro]int NULL,
[dt_movimento]datetime NULL,
[dt_vencimento]datetime NULL,
[dt_pagamento]datetime NULL,
[descricao]varchar(100) COLLATE Latin1_General_CI_AS NULL,
[valor]decimal(18, 2) NULL,
[valor_pago]decimal(18, 2) NULL,
[status]varchar(25) COLLATE Latin1_General_CI_AS NULL,
[parcela]int NULL,
[id_cliente]int NULL
)
ON [PRIMARY]
GO--
-- Definition for table debito :
--CREATE TABLE [dbo].[debito] (
[id_debito]int IDENTITY(1, 1) NOT NULL,
[id_nota_fiscal]int NULL,
[id_centro]int NULL,
[id_fornecedor]int NULL,
[dt_movimento]datetime NULL,
[dt_vencimento]datetime NULL,
[dt_pagamento]datetime NULL,
[descricao]varchar(100) COLLATE Latin1_General_CI_AS NULL,
[valor]decimal(18, 2) NULL,
[valor_pago]decimal(18, 2) NULL,
[status]varchar(25) COLLATE Latin1_General_CI_AS NULL,
[parcela]int NULL
)
ON [PRIMARY]
GOSolucão Para Executar, Pode Ter Views SP
Code SnippetSub ExecutaSql(ByVal path As String)
If AbreCon() = False Then
Exit Sub End If Try Dim sr As IO.StreamReader = IO.File.OpenText(path) Dim Bloco As String = String.Empty Dim Linha As String = String.Empty Dim cmd As SqlCommand = CN.CreateCommandcmd.CommandType = CommandType.Text
cmd.CommandText =
"USE [" & Me.cbBanco.Text & "]"cmd.ExecuteNonQuery()
Catch ex As ExceptionMessageBox.Show(
"Erro ao Selecionar o Banco de Dados!") Exit Sub End TryLinha = sr.ReadLine
Bloco = Bloco & ControlChars.NewLine & Linha
cmd.CommandText = Bloco
cmd.ExecuteNonQuery()
MessageBox.Show(
"Erro ao executar o Seguinte Bloco de Comandos:" & ControlChars.NewLine & Bloco & ControlChars.NewLine & ex.Message) End TryBloco =
String.Empty End If End If End WhileMessageBox.Show(
use asssim
ExecutaSql("C:\Banco.sql")
Todas as Respostas
-
Olá Vinícius,
Como dá para ver na mensagem de erro, o problema está no GO. Ele só é reconhecido pelo Query Analyzer e pelo comando (no DOS) OSQL.
O GO é colocado no script para fazer a execução em lotes, e algumas instruções não podem ser executadas no mesmo lote.
Como solução, eu diria para você dividir os scripts no momento que for encontrado um GO. Não sou programador, mas vou tentar exemplificar:
-> Abre sessão com SQL
-> Executa parte antes do GO
-> Executa parte depois do GO
-> Fecha sessão
Assim deve funcionar perfeitamente, e tudo controlado pela sua aplicação, sem fazer nada no SQL.
Abraço!!!
-
Bom dia Alexandre,
Entendi sua ideia, creio que funcione mas dê uma olhada nos scripts que esse software irá rodar!
Ex. do script.:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CtbVwiSdSoC]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CtbVwiSdSoC]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CtbVwiSdSoD]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CtbVwiSdSoD]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CtbVwiSProC]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CtbVwiSProC]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CtbVwiSProD]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CtbVwiSProD]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CtbVwiSdCcC]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CtbVwiSdCcC]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CtbVwiSdCcD]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CtbVwiSdCcD]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CtbVwiSdCtC]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CtbVwiSdCtC]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CtbVwiSdCtD]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CtbVwiSdCtD]
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE VIEW dbo.CtbVwiSProC
WITH SCHEMABINDING
AS
SELECT COUNT_BIG (*) AS nQuaRegi, YEAR(dDatLanc) AS nNumAno, MONTH(dDatLanc) AS nNumMes, nCodContC AS nCodCont,
nCodEmprC3 As nCodEmpr3, nCodAuxiC AS nCodProd, nCodCoPrC AS nCodCoPr, nCodLocaC AS nCodLoca,
nCodRastC AS nCodRast, SUM(nVlrLanc) AS nVlrLanc, SUM(nQuaLancC) AS nQuaLanc
FROM dbo.CtbTblLCtb
WHERE (cDesAuxiC = 'PROD') AND (nCodAuxiC > 0)
GROUP BY YEAR(dDatLanc), MONTH(dDatLanc), nCodContC, nCodEmprC3, nCodAuxiC, nCodCoPrC, nCodLocaC, nCodRastCGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOset ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GOset NUMERIC_ROUNDABORT off
GOCREATE UNIQUE CLUSTERED INDEX [PV_SProC] ON [dbo].[CtbVwiSProC]([nNumAno], [nNumMes], [nCodCont], [nCodEmpr3], [nCodProd], [nCodCoPr], [nCodLoca], [nCodRast]) ON [INDICES]
GOset NUMERIC_ROUNDABORT off set arithabort OFF
GOSET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCREATE VIEW dbo.CtbVwiSProD
WITH SCHEMABINDING
AS
SELECT COUNT_BIG (*) AS nQuaRegi, YEAR(dDatLanc) AS nNumAno, MONTH(dDatLanc) AS nNumMes, nCodContD AS nCodCont,
nCodEmprD3 As nCodEmpr3, nCodAuxiD AS nCodProd, nCodCoPrD AS nCodCoPr, nCodLocaD AS nCodLoca,
nCodRastD AS nCodRast, SUM(nVlrLanc) AS nVlrLanc, SUM(nQuaLancD) AS nQuaLanc
FROM dbo.CtbTblLCtb
WHERE (cDesAuxiD = 'PROD') AND (nCodAuxiD > 0)
GROUP BY YEAR(dDatLanc), MONTH(dDatLanc), nCodContD, nCodEmprD3, nCodAuxiD, nCodCoPrD, nCodLocaD, nCodRastDGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOset ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GOset NUMERIC_ROUNDABORT off
GOCREATE UNIQUE CLUSTERED INDEX [PV_SProD] ON [dbo].[CtbVwiSProD]([nNumAno], [nNumMes], [nCodCont], [nCodEmpr3], [nCodProd], [nCodCoPr], [nCodLoca], [nCodRast]) ON [INDICES]
GOset NUMERIC_ROUNDABORT off set arithabort OFF
GOSET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCreate View Dbo.CtbVwiSdCcC With SchemaBinding As
Select Count_Big(*) As nQuaRegi, nCodColi, Year(dDatCompC) As nNumAno,
Month(dDatCompC) As nNumMes, nCodContC As nCodCont, nCodAuxiC As nCodAuxi,
Sum(nVlrLanc) As nVlrLanc
From Dbo.CtbTblLCtb
Where cDesAuxiC = 'BANC'
And nCodAuxiC > 0
And dDatCompC Is Not Null
Group By nCodColi, Year(dDatCompC), Month(dDatCompC), nCodContC, nCodAuxiC
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOset ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GOset NUMERIC_ROUNDABORT off
GOCREATE UNIQUE CLUSTERED INDEX [PV_SdCcC] ON [dbo].[CtbVwiSdCcC]([nCodColi], [nNumAno], [nNumMes], [nCodCont], [nCodAuxi]) ON [INDICES]
GOset NUMERIC_ROUNDABORT off set arithabort OFF
GOSET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCreate View Dbo.CtbVwiSdCcD With SchemaBinding As
Select Count_Big(*) As nQuaRegi, nCodColi, Year(dDatCompD) As nNumAno,
Month(dDatCompD) As nNumMes, nCodContD As nCodCont, nCodAuxiD As nCodAuxi,
Sum(nVlrLanc) As nVlrLanc
From Dbo.CtbTblLCtb
Where cDesAuxiD = 'BANC'
And nCodAuxiD > 0
And dDatCompD Is Not Null
Group By nCodColi, Year(dDatCompD), Month(dDatCompD), nCodContD, nCodAuxiD
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOset ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GOset NUMERIC_ROUNDABORT off
GOCREATE UNIQUE CLUSTERED INDEX [PV_SdCcD] ON [dbo].[CtbVwiSdCcD]([nCodColi], [nNumAno], [nNumMes], [nCodCont], [nCodAuxi]) ON [INDICES]
GOset NUMERIC_ROUNDABORT off set arithabort OFF
GOSET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCreate View Dbo.CtbVwiSdCtC With SchemaBinding As
Select Count_Big(*) As nQuaRegi, cDesAuxiC As cDesAuxi, nCodColi, Year(dDatLanc) As nNumAno,
Month(dDatLanc) As nNumMes, nCodContC As nCodCont, nCodEmprC3 As nCodEmpr3, nCodAuxiC As nCodAuxi,
nCodCoPrC As nCodCoPr, Sum(nVlrLanc) As nVlrLanc, Sum(nQuaLancC) As nQuaLanc
From Dbo.CtbTblLCtb
Group By cDesAuxiC, nCodColi, Year(dDatLanc), Month(dDatLanc), nCodContC, nCodEmprC3, nCodAuxiC, nCodCoPrCGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOset ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GOset NUMERIC_ROUNDABORT off
GOCREATE UNIQUE CLUSTERED INDEX [PV_SdCtC] ON [dbo].[CtbVwiSdCtC]([cDesAuxi], [nCodColi], [nNumAno], [nNumMes], [nCodCont], [nCodEmpr3], [nCodAuxi], [nCodCoPr]) ON [INDICES]
GOset NUMERIC_ROUNDABORT off set arithabort OFF
GOSET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCreate View Dbo.CtbVwiSdCtD With SchemaBinding As
Select Count_Big(*) As nQuaRegi, cDesAuxiD As cDesAuxi, nCodColi, Year(dDatLanc) As nNumAno,
Month(dDatLanc) As nNumMes, nCodContD As nCodCont, nCodEmprD3 As nCodEmpr3, nCodAuxiD As nCodAuxi,
nCodCoPrD As nCodCoPr, Sum(nVlrLanc) As nVlrLanc, Sum(nQuaLancD) As nQuaLanc
From Dbo.CtbTblLCtb
Group By cDesAuxiD, nCodColi, Year(dDatLanc), Month(dDatLanc), nCodContD, nCodEmprD3, nCodAuxiD, nCodCoPrDGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOset ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GOset NUMERIC_ROUNDABORT off
GOCREATE UNIQUE CLUSTERED INDEX [PV_SdCtD] ON [dbo].[CtbVwiSdCtD]([cDesAuxi], [nCodColi], [nNumAno], [nNumMes], [nCodCont], [nCodEmpr3], [nCodAuxi], [nCodCoPr]) ON [INDICES]
GOset NUMERIC_ROUNDABORT off set arithabort OFF
GOSET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCreate View Dbo.CtbVwiSdSoC With SchemaBinding As
Select Count_Big(*) As nQuaRegi, Dbo.CtbTblLCtb.nCodColi, Year(Dbo.CtbTblLCtb.dDatLanc) As nNumAno,
Month(Dbo.CtbTblLCtb.dDatLanc) As nNumMes, Dbo.CtbTblLCtb.nCodContC As nCodCont,
Dbo.CtbTblLCtb.nCodEmprC3 As nCodEmpr3, Dbo.CtbTblLCtb.nCodAuxiC As nCodAuxi,
Dbo.CtbTblLCtb.nCodCoPrC As nCodCoPr, Dbo.CtbTblLSor.nCodSortC As nCodSort,
Dbo.CtbTblLSor.nCodLocaC As nCodLoca, Dbo.CtbTblLSor.cCodRastC As cCodRast,
Sum(Dbo.CtbTblLSor.nQuaLancC) As nQuaLanc, Sum(Dbo.CtbTblLSor.nQcvLancC) As nQcvLanc
From Dbo.CtbTblLCtb
Inner Join Dbo.CtbTblLSor On
Dbo.CtbTblLCtb.nIdeLCtb = Dbo.CtbTblLSor.nIdeLCtb
Where Dbo.CtbTblLCtb.cDesAuxiC = 'PROD'
And Dbo.CtbTblLCtb.nCodAuxiC > 0
Group By Dbo.CtbTblLCtb.nCodColi, Year(Dbo.CtbTblLCtb.dDatLanc),
Month(Dbo.CtbTblLCtb.dDatLanc), Dbo.CtbTblLCtb.nCodContC, Dbo.CtbTblLCtb.nCodEmprC3, Dbo.CtbTblLCtb.nCodAuxiC,
Dbo.CtbTblLCtb.nCodCoPrC, Dbo.CtbTblLSor.nCodSortC, Dbo.CtbTblLSor.nCodLocaC, Dbo.CtbTblLSor.cCodRastCGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOset ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GOset NUMERIC_ROUNDABORT off
GOCREATE UNIQUE CLUSTERED INDEX [PV_SdSoC] ON [dbo].[CtbVwiSdSoC]([nCodColi], [nNumAno], [nNumMes], [nCodCont], [nCodEmpr3], [nCodAuxi], [nCodCoPr], [nCodSort], [nCodLoca], [cCodRast]) ON [INDICES]
GOset NUMERIC_ROUNDABORT off set arithabort OFF
GOSET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCreate View Dbo.CtbVwiSdSoD With SchemaBinding As
Select Count_Big(*) As nQuaRegi, Dbo.CtbTblLCtb.nCodColi, Year(Dbo.CtbTblLCtb.dDatLanc) As nNumAno,
Month(Dbo.CtbTblLCtb.dDatLanc) As nNumMes, Dbo.CtbTblLCtb.nCodContD As nCodCont,
Dbo.CtbTblLCtb.nCodEmprD3 As nCodEmpr3, Dbo.CtbTblLCtb.nCodAuxiD As nCodAuxi,
Dbo.CtbTblLCtb.nCodCoPrD As nCodCoPr, Dbo.CtbTblLSor.nCodSortD As nCodSort,
Dbo.CtbTblLSor.nCodLocaD As nCodLoca, Dbo.CtbTblLSor.cCodRastD As cCodRast,
Sum(Dbo.CtbTblLSor.nQuaLancD) As nQuaLanc, Sum(Dbo.CtbTblLSor.nQcvLancD) As nQcvLanc
From Dbo.CtbTblLCtb
Inner Join Dbo.CtbTblLSor On
Dbo.CtbTblLCtb.nIdeLCtb = Dbo.CtbTblLSor.nIdeLCtb
Where Dbo.CtbTblLCtb.cDesAuxiD = 'PROD'
And Dbo.CtbTblLCtb.nCodAuxiD > 0
Group By Dbo.CtbTblLCtb.nCodColi, Year(Dbo.CtbTblLCtb.dDatLanc), Month(Dbo.CtbTblLCtb.dDatLanc),
Dbo.CtbTblLCtb.nCodContD, Dbo.CtbTblLCtb.nCodEmprD3, Dbo.CtbTblLCtb.nCodAuxiD, Dbo.CtbTblLCtb.nCodCoPrD,
Dbo.CtbTblLSor.nCodSortD, Dbo.CtbTblLSor.nCodLocaD, Dbo.CtbTblLSor.cCodRastD
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOset ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS on
GOset NUMERIC_ROUNDABORT off
GOCREATE UNIQUE CLUSTERED INDEX [PV_SdSoD] ON [dbo].[CtbVwiSdSoD]([nCodColi], [nNumAno], [nNumMes], [nCodCont], [nCodEmpr3], [nCodAuxi], [nCodCoPr], [nCodSort], [nCodLoca], [cCodRast]) ON [INDICES]
GOset NUMERIC_ROUNDABORT off set arithabort OFF
GOSET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GOOBSERVE.. Que existe varios 'GO', não seria muito prático, nesta ocasião dividir ele em varios pedassos abrir e fechar a conexão sendo que a lentidão iria aumentar e não sei se iria funcionar!
Agradeço pela atenção!
Obrigado..
Vinicius Oliveira Marra
-
Vinícius,
Funcionar vai. E o tempo de execução será apenas um pouco maior que o tempo para executar diretamente o SQL. Sobre o que você disse, não é preciso abrir e fechar a conexão a cada execução, pode ser uma conexão apenas e apenas fazer várias execuções.
Para definir o que será executado, poderá usar algo como um Array dentro do C#, separando as string a partir do GO.
Tente aí, vai funcionar perfeitamente.
Abraço!!!
-
O problema é a palavra "GO".
O "GO" não é SQL , é reconhecido pelo Query Analyser como um comando. O execute do C# só reconhece sintaxe SQL.
Se vc, antes de executar o script, dar um replace removendo todos os "GO" o script será rodado sem problemas.
Espero ter ajudado.
-
alleolli,
Não é tão simples assim. Existem instruções que não podem ser executadas em conjunto (no mesmo lote), faça um teste rodando o seguinte script, todo ele:
Code Snippet-- inicio da primeira view
create
view dbo.V1as
select
* from teste-- fim da primeira view
-- inicio da segunda view
create
view dbo.V2as
select
* from teste-- fim da segunda view
Vai dar erro. Por isso dei a idéia de quebrar o script em vários usando como separador o GO.
Abraço!!!
-
Olá Pessoal
eu Fiz uma Forma de Executar um Script Por Blocos Mesmo que ele Tenha 'GO'
Dessa Forma podemos Executar Um Script Gerado Pelo 'SQL Manager for SQL Server' Sem Problemas
Exemplo de Script: ("C:\Banco.sql")
Code SnippetCREATE TABLE [dbo].[credito] (
[id_credito]int IDENTITY(1, 1) NOT NULL,
[id_nota_fiscal]int NULL,
[id_centro]int NULL,
[dt_movimento]datetime NULL,
[dt_vencimento]datetime NULL,
[dt_pagamento]datetime NULL,
[descricao]varchar(100) COLLATE Latin1_General_CI_AS NULL,
[valor]decimal(18, 2) NULL,
[valor_pago]decimal(18, 2) NULL,
[status]varchar(25) COLLATE Latin1_General_CI_AS NULL,
[parcela]int NULL,
[id_cliente]int NULL
)
ON [PRIMARY]
GO--
-- Definition for table debito :
--CREATE TABLE [dbo].[debito] (
[id_debito]int IDENTITY(1, 1) NOT NULL,
[id_nota_fiscal]int NULL,
[id_centro]int NULL,
[id_fornecedor]int NULL,
[dt_movimento]datetime NULL,
[dt_vencimento]datetime NULL,
[dt_pagamento]datetime NULL,
[descricao]varchar(100) COLLATE Latin1_General_CI_AS NULL,
[valor]decimal(18, 2) NULL,
[valor_pago]decimal(18, 2) NULL,
[status]varchar(25) COLLATE Latin1_General_CI_AS NULL,
[parcela]int NULL
)
ON [PRIMARY]
GOSolucão Para Executar, Pode Ter Views SP
Code SnippetSub ExecutaSql(ByVal path As String)
If AbreCon() = False Then
Exit Sub End If Try Dim sr As IO.StreamReader = IO.File.OpenText(path) Dim Bloco As String = String.Empty Dim Linha As String = String.Empty Dim cmd As SqlCommand = CN.CreateCommandcmd.CommandType = CommandType.Text
cmd.CommandText =
"USE [" & Me.cbBanco.Text & "]"cmd.ExecuteNonQuery()
Catch ex As ExceptionMessageBox.Show(
"Erro ao Selecionar o Banco de Dados!") Exit Sub End TryLinha = sr.ReadLine
Bloco = Bloco & ControlChars.NewLine & Linha
cmd.CommandText = Bloco
cmd.ExecuteNonQuery()
MessageBox.Show(
"Erro ao executar o Seguinte Bloco de Comandos:" & ControlChars.NewLine & Bloco & ControlChars.NewLine & ex.Message) End TryBloco =
String.Empty End If End If End WhileMessageBox.Show(
use asssim
ExecutaSql("C:\Banco.sql")