import java.util.*;
StringTokenizer st;
int ans;
public class check {
String str="7 + 5";
StringTokenizer st=new StringTokenizer(str);
int v1=Integer.parseInt(st.nextToken());
String op=st.nextToken();
int v2=Integer.parseInt(st.nextToken());
if(op.equals("+")) { ans= v1 + v2; }
if(op.equals("-")) { ans= v1 - v2; }
//.........
}
используйте xp_cmdshell и sqlcmd
EXEC xp_cmdshell 'sqlcmd -S ' + @DBServerName + ' -d ' + @DBName + ' -i ' + @FilePathName
Смотрите на OSQL. Эта утилита позволяет Вам выполнить SQL от командной строки. Легко быть установленным в системе, я думаю, что это идет со свободной SQL Server Express.
qick поиск "OSQL" на переполнении стека показывает, что много материала доступно.
главным обработать правильно является пользователь и параметры учетной записи пароля, которые передаются в на командной строке. Я видел пакетные файлы, которые используют полномочия доступа к файлу NT управлять файлом с паролем и затем использующий содержание этого файла для запущения сценария. Вы могли также записать быстрый C# или программу VB для выполнения его с помощью класса Процесса.
Я не был бы рекомендуемое выполнение этого, но если Вы действительно имеете к тогда расширенной хранимой процедуре xp_cmdshell
, то, что Вы хотите. Необходимо будет сначала считать содержание файла в переменную и затем использовать что-то вроде этого:
DECLARE @cmd sysname, @var sysname
SET @var = 'Hello world'
SET @cmd = 'echo ' + @var + ' > var_out.txt'
EXEC master..xp_cmdshell @cmd
Примечание: xp_cmdshell выполняет команды в фоновом режиме из-за этого, он не должен использоваться для запущения программ, которые требуют ввода данных пользователем.
Для аутентификации Windows, если Вы работаете как другой пользователь: Откройте Command Prompt как своего пользователя Windows (Щелчок правой кнопкой по нему, Откройте File Location, Shift + Щелчок правой кнопкой, Выполнение как другой пользователь)
sqlcmd -S localhost\SQLEXPRESS -d DatabaseName-i "c:\temp\script.sql"
Или если Вы используете пользователя SQL Server:
sqlcmd -S localhost\SQLEXPRESS -d DatabaseName-i "c:\temp\script.sql" -U UserName -P Password
Замена localhost\SQLEXPRESS с Вами имя сервера, если не локальный сервер.
Для кого-либо спотыкающегося на этот вопрос как я сделал и мог бы найти это полезным, мне понравилось ответ Брюса Томпсона (который выполнил SQL из файлов в цикле), но я предпочел подход Пеша Хелфера к выполнению файла (поскольку это избегало использования xp_cmdshell).
, Таким образом, я объединил два (и настроил его немного, таким образом, это выполняет все от папки вместо вручную созданного списка):
DECLARE @Dir NVARCHAR(512) = 'd:\SQLScriptsDirectory'
DECLARE @FileList TABLE (
subdirectory NVARCHAR(512),
depth int,
[file] bit
)
INSERT @FileList
EXEC Master.dbo.xp_DirTree @Dir,1,1
WHILE (SELECT COUNT(*) FROM @FileList) > 0
BEGIN
DECLARE @FileName NVARCHAR(MAX) = (SELECT TOP(1) subdirectory FROM @FileList)
DECLARE @FullPath NVARCHAR(MAX) = @Dir + '\' + @FileName
DECLARE @SQL NVARCHAR(MAX)
DECLARE @SQL_TO_EXEC NVARCHAR(MAX)
SELECT @SQL_TO_EXEC = 'select @SQL = BulkColumn
FROM OPENROWSET
( BULK ''' + @FullPath + '''
, SINGLE_BLOB ) AS MYTABLE'
DECLARE @parmsdeclare NVARCHAR(4000) = '@SQL varchar(max) OUTPUT'
EXEC sp_executesql @stmt = @SQL_TO_EXEC
, @params = @parmsdeclare
, @SQL = @SQL OUTPUT
EXEC (@sql)
DELETE FROM @FileList WHERE subdirectory = @FileName
PRINT 'EXECUTED: ' + @FileName
END