От:
ydab
Дата: 21.01.10 10:44
Оценка:
добрый день,
хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:
using (SqlConnection connection = new SqlConnection(sqlConnectionString))
{
using (SqlCommand command = new SqlCommand(loadScript("db.sql" ), connection))
{
command.Connection.Open();
command.ExecuteNonQuery();
}
}
сам скрипт выглядит так:
USE [master]
GO
/****** Object: Database [LeoTestDB] Script Date: 01/20/2010 13:47:32 ******/
CREATE DATABASE [LeoTestDB] ON PRIMARY
( NAME = N'LeoTestDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'LeoTestDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF
GO
итп.
к сожелению это не работает.
как заставить работать?
заранее благодарен
От:
Аноним
Дата: 21.01.10 11:13
Оценка:
Здравствуйте, ydab, Вы писали:
Y>добрый день,
Y>хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:
Y>Y>using (SqlConnection connection = new SqlConnection(sqlConnectionString))
Y>{
Y> using (SqlCommand command = new SqlCommand(loadScript("db.sql" ), connection))
Y> {
Y> command.Connection.Open();
Y> command.ExecuteNonQuery();
Y> }
Y>}
Y>
Y>сам скрипт выглядит так:
Y>Y>USE [master]
Y>GO
Y>/****** Object: Database [LeoTestDB] Script Date: 01/20/2010 13:47:32 ******/
Y>CREATE DATABASE [LeoTestDB] ON PRIMARY
Y>( NAME = N'LeoTestDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
Y> LOG ON
Y>( NAME = N'LeoTestDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
Y>GO
Y>ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
Y>GO
Y>IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
Y>begin
Y>EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
Y>end
Y>GO
Y>ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF
Y>GO
Y>
Y>итп.
Y>к сожелению это не работает.
Y>как заставить работать?
Y>заранее благодарен
Надо немного модифицировать скрипт примерно вот так:
USE [master]
/****** Object: Database [LeoTestDB] Script Date: 01/20/2010 13:47:32 ******/
CREATE DATABASE [LeoTestDB] ON PRIMARY
( NAME = N'LeoTestDB', FILENAME = N'd:\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'LeoTestDB_log', FILENAME = N'd:\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF
А вызывать его на исполнение вот так:
using (SqlConnection cConnect = new SqlConnection("Data Source=server_name;Initial Catalog=master;Integrated Security=SSPI;"))
{
cConnect.Open();
using(StreamReader cStream = File.OpenText("d:\\sqlcommand.sql"))
{
string strCmd = cStream.ReadToEnd();
using(SqlCommand cCommand = new SqlCommand())
{
cCommand.CommandText = "[dbo].[sp_executesql]";
cCommand.Connection = cConnect;
cCommand.CommandType = CommandType.StoredProcedure;
cCommand.CommandTimeout = 0;
cCommand.Parameters.Add(new SqlParameter("@stmt", strCmd));
cCommand.ExecuteNonQuery();
}
}
}
Re[2]: scripts & SqlCommand
От:
andrw
Дата: 21.01.10 11:17
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, ydab, Вы писали:
Y>>добрый день,
Y>>хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:
Y>>Y>>using (SqlConnection connection = new SqlConnection(sqlConnectionString))
Y>>{
Y>> using (SqlCommand command = new SqlCommand(loadScript("db.sql" ), connection))
Y>> {
Y>> command.Connection.Open();
Y>> command.ExecuteNonQuery();
Y>> }
Y>>}
Y>>
Y>>сам скрипт выглядит так:
Y>>Y>>USE [master]
Y>>GO
Y>>/****** Object: Database [LeoTestDB] Script Date: 01/20/2010 13:47:32 ******/
Y>>CREATE DATABASE [LeoTestDB] ON PRIMARY
Y>>( NAME = N'LeoTestDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
Y>> LOG ON
Y>>( NAME = N'LeoTestDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
Y>>GO
Y>>ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
Y>>GO
Y>>IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
Y>>begin
Y>>EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
Y>>end
Y>>GO
Y>>ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF
Y>>GO
Y>>
Y>>итп.
Y>>к сожелению это не работает.
Y>>как заставить работать?
Y>>заранее благодарен
А>Надо немного модифицировать скрипт примерно вот так:
А>USE [master]
А>/****** Object: Database [LeoTestDB] Script Date: 01/20/2010 13:47:32 ******/
А>CREATE DATABASE [LeoTestDB] ON PRIMARY
А>( NAME = N'LeoTestDB', FILENAME = N'd:\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
А> LOG ON
А>( NAME = N'LeoTestDB_log', FILENAME = N'd:\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
А>ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
А>IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
А>begin
А>EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
А>end
А>ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF
А>А вызывать его на исполнение вот так:
А>using (SqlConnection cConnect = new SqlConnection("Data Source=server_name;Initial Catalog=master;Integrated Security=SSPI;"))
А> {
А> cConnect.Open();
А> using(StreamReader cStream = File.OpenText("d:\\sqlcommand.sql"))
А> {
А> string strCmd = cStream.ReadToEnd();
А> using(SqlCommand cCommand = new SqlCommand())
А> {
А> cCommand.CommandText = "[dbo].[sp_executesql]";
А> cCommand.Connection = cConnect;
А> cCommand.CommandType = CommandType.StoredProcedure;
А> cCommand.CommandTimeout = 0;
А> cCommand.Parameters.Add(new SqlParameter("@stmt", strCmd));
А> cCommand.ExecuteNonQuery();
А> }
А> }
А>
забыл о разметке прошу прощения:
А>USE [master]
А>/****** Object: Database [LeoTestDB] Script Date: 01/20/2010 13:47:32 ******/
А>CREATE DATABASE [LeoTestDB] ON PRIMARY
А>( NAME = N'LeoTestDB', FILENAME = N'd:\LeoTestDB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
А> LOG ON
А>( NAME = N'LeoTestDB_log', FILENAME = N'd:\LeoTestDB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
А>ALTER DATABASE [LeoTestDB] SET COMPATIBILITY_LEVEL = 100
А>IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
А>begin
А>EXEC [LeoTestDB].[dbo].[sp_fulltext_database] @action = 'enable'
А>end
А>ALTER DATABASE [LeoTestDB] SET ANSI_NULL_DEFAULT OFF
using (SqlConnection cConnect = new SqlConnection("Data Source=igw020738\\sqlexpresstest;Initial Catalog=master;Integrated Security=SSPI;" ))
{
cConnect.Open();
using (StreamReader cStream = File.OpenText("d:\\sqlcommand.sql" ))
{
string strCmd = cStream.ReadToEnd();
using (SqlCommand cCommand = new SqlCommand())
{
cCommand.CommandText = "[dbo].[sp_executesql]" ;
cCommand.Connection = cConnect;
cCommand.CommandType = CommandType.StoredProcedure;
cCommand.CommandTimeout = 0;
cCommand.Parameters.Add(new SqlParameter("@stmt" , strCmd));
cCommand.ExecuteNonQuery();
}
}
}
От:
_FRED_
Дата: 21.01.10 11:23
Оценка:
Здравствуйте, ydab, Вы писали:
Y>добрый день,
Y>хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:
Y>using (SqlConnection connection = new SqlConnection(sqlConnectionString))
Y>{
Y> using (SqlCommand command = new SqlCommand(loadScript("db.sql" ), connection))
Y> {
Y> command.Connection.Open();
Y> command.ExecuteNonQuery();
Y> }
Y>}
Y>к сожелению это не работает.
Y>как заставить работать?
А зачем? Чем не подходит объектная модель самого сиквела (
здесь )?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: scripts & SqlCommand
От:
Lloyd
Дата: 21.01.10 11:40
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>А зачем? Чем не подходит объектная модель самого сиквела (здесь )?
Для этого как минимум нужно, чтобы SMO была инсталирована.
Re[3]: scripts & SqlCommand
От:
_FRED_
Дата: 21.01.10 11:48
Оценка:
Здравствуйте, Lloyd, Вы писали:
_FR>>А зачем? Чем не подходит объектная модель самого сиквела (здесь )?
L>Для этого как минимум нужно, чтобы SMO была инсталирована.
Точно!
Tip of the Day – SQL Server Client tools .
Help will always be given at Hogwarts to those who ask for it.
От:
vmpire
Дата: 21.01.10 11:49
Оценка:
Здравствуйте, ydab, Вы писали:
Y>хочется с помощью SQL Server Managment Studio сгенерированный *.sql скрипт, вызвать примерно вот так:
Y>Y>using (SqlConnection connection = new SqlConnection(sqlConnectionString))
Y>{
Y> using (SqlCommand command = new SqlCommand(loadScript("db.sql" ), connection))
Y> {
Y> command.Connection.Open();
Y> command.ExecuteNonQuery();
Y> }
Y>}
Y>
Y>к сожелению это не работает.
Y>как заставить работать?
Убрать GO. Это не команда TSQL.
Или разбивать текст на куски по GO и выполнять частями.
Re[4]: scripts & SqlCommand
От:
_FRED_
Дата: 21.01.10 11:50
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>>>А зачем? Чем не подходит объектная модель самого сиквела (здесь )?
L>>Для этого как минимум нужно, чтобы SMO была инсталирована.
_FR>Точно! Tip of the Day – SQL Server Client tools .
+ не забываем
Licensing SQL Server Client Tools .
Help will always be given at Hogwarts to those who ask for it.
От:
Danchik
Дата: 21.01.10 11:57
Оценка:
Здравствуйте, ydab, Вы писали:
[Skip]
Y>к сожелению это не работает.
Y>как заставить работать?
Y>заранее благодарен
Загрузить файл в память, порезать его по слову GO
И запускать эти куски по порядку
Re[2]: scripts & SqlCommand
От:
Lloyd
Дата: 21.01.10 11:59
Оценка:
Здравствуйте, vmpire, Вы писали:
Y>>к сожелению это не работает.
Y>>как заставить работать?
V>Убрать GO. Это не команда TSQL.
Это не всегда сработает.
V>Или разбивать текст на куски по GO и выполнять частями.
Это не так просто. Нужно уметь отличать GO как разделитель от GO как часть литерала или части идетификатора...
Re[3]: scripts & SqlCommand
От:
_FRED_
Дата: 21.01.10 12:07
Оценка:
Здравствуйте, Lloyd, Вы писали:
V>>Или разбивать текст на куски по GO и выполнять частями.
L>Это не так просто. Нужно уметь отличать GO как разделитель от GO как часть литерала или части идетификатора...
GO (Transact-SQL)
A Transact-SQL statement cannot occupy the same line as a GO command. However, the line can contain comments.
Ничего сложного. Достаточно отпарсить коментарии да учесть "[count]".
Но вот вроде бы действительно не все команды можно выполнять через SqlCommand, но на вскидку не вспомню, с чём именно может быть засада.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: scripts & SqlCommand
От:
Lloyd
Дата: 21.01.10 12:14
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>GO (Transact-SQL)
_FR>_FR>A Transact-SQL statement cannot occupy the same line as a GO command. However, the line can contain comments.
_FR>Ничего сложного. Достаточно отпарсить коментарии да учесть "[count]".
Это tsql не может идти в той же строчке, что и GO, а GO сам по себе вполне может быть внутри tsql-я:
PRINT '
--
GO
--
'
Re[5]: scripts & SqlCommand
От:
_FRED_
Дата: 21.01.10 12:54
Оценка:
Здравствуйте, Lloyd, Вы писали:
_FR>>Ничего сложного. Достаточно отпарсить коментарии да учесть "[count]".
L>Это tsql не может идти в той же строчке, что и GO, а GO сам по себе вполне может быть внутри tsql-я:
L>PRINT '
L>--
L>GO
L>--
L>'
Ты уверен, что это выполнится? Мне, к сожалению, сейчас негде проверить…
Help will always be given at Hogwarts to those who ask for it.
Re[6]: scripts & SqlCommand
От:
Lloyd
Дата: 21.01.10 13:03
Оценка:
+1
Здравствуйте, _FRED_, Вы писали:
L>>Это tsql не может идти в той же строчке, что и GO, а GO сам по себе вполне может быть внутри tsql-я:
_FR>L>>PRINT '
L>>--
L>>GO
L>>--
L>>'
_FR>
_FR>Ты уверен, что это выполнится? Мне, к сожалению, сейчас негде проверить…
Я проверил, прежде чем постить. Вывод такой:
--
GO
--
Так что, увы, задачка не такая простая.
Re[7]: scripts & SqlCommand
Здравствуйте, Lloyd, Вы писали:
L>Я проверил, прежде чем постить. Вывод такой:
L>L>--
L>GO
L>--
L>Так что, увы, задачка не такая простая.
Есть ли практический смысл решать задачу в постановке, учитывающей
такие случаи?
Re[8]: scripts & SqlCommand
От:
Lloyd
Дата: 21.01.10 13:11
Оценка:
Здравствуйте, samius, Вы писали:
S>Есть ли практический смысл решать задачу в постановке, учитывающей такие случаи?
Об этом лучше спросить топикстартера.
Re[3]: scripts & SqlCommand
Здравствуйте, andrw, Вы писали:
А еще ты забыл убрать лишнее цитирование.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить