SQL Server: як выканаць .sql з іншага запыту?

У мяне ёсць .sql скрыпт з вялікай колькасцю запытаў дзеянняў, якія працуюць на некаторых прамежкавых табліцах. Гэты скрыпт павінен быць запушчаны ў два разы з некаторымі іншымі камандамі, па-паміж т.е.:

    <�Літый> Загрузка прамежкавай табліцы з крыніцы А
  1. Выкарыстоўвайце do_stuff.sql , каб апрацаваць яго
  2. Перамясціць вынікі дзе-небудзь.
  3. <�Літый> Паўтарыце крокі 1-3 для крыніцы B.

The brute force approach would be to just copy & paste dostuff.sql as needed. While this would technically work, is there a better way?

I'm hoping there's a command like RunThisSQL 'C:\do_stuff.sql' that I haven't discovered yet.

Update

Well, it's been about 5 years and I just re-discovered this old question. I did this recently and made a cursor to loop thru a master table. For each record in that master table, the script runs through an inner script using variables set by the master table.

https://www.mssqltips.com/sqlservertip/1599/sql -server-курсора прыклад/

3
Чаму вы не канвертаваць файл у зберажоную працэдуру?
дададзена аўтар Dan Bracuk, крыніца
Як вы запусціце скрыпт? Адзін метад павінен быў бы напісаць/PowerShell працэдуру пакетнае якая працуе Sqlcmd са сцэнарам, нешта накшталт SQLCMD -SMyServer -ido_stuff.sql
дададзена аўтар voithos, крыніца
Як вы запусціце скрыпт? Адзін метад павінен быў бы напісаць/PowerShell працэдуру пакетнае якая працуе Sqlcmd са сцэнарам, нешта накшталт SQLCMD -SMyServer -ido_stuff.sql
дададзена аўтар voithos, крыніца
Праблема заключаецца ў тым, што код SQL, калі ён на самай справе працуе, працуе на сервер . Ён больш не мае якія-небудзь (рэальныя) адносіны з асобнікам SSMS, што <�я> паслаў запыт да сервера, акрамя злучэння. І нічога не ўбудоўваць у ТДС, каб ён нейкім чынам запытаць новы файл, які будзе загружаны і адпраўлены па гэтым злучэнню.
дададзена аўтар Damien_The_Unbeliever, крыніца
Праблема заключаецца ў тым, што код SQL, калі ён на самай справе працуе, працуе на сервер . Ён больш не мае якія-небудзь (рэальныя) адносіны з асобнікам SSMS, што <�я> паслаў запыт да сервера, акрамя злучэння. І нічога не ўбудоўваць у ТДС, каб ён нейкім чынам запытаць новы файл, які будзе загружаны і адпраўлены па гэтым злучэнню.
дададзена аўтар Damien_The_Unbeliever, крыніца
Праблема заключаецца ў тым, што код SQL, калі ён на самай справе працуе, працуе на сервер . Ён больш не мае якія-небудзь (рэальныя) адносіны з асобнікам SSMS, што <�я> паслаў запыт да сервера, акрамя злучэння. І нічога не ўбудоўваць у ТДС, каб ён нейкім чынам запытаць новы файл, які будзе загружаны і адпраўлены па гэтым злучэнню.
дададзена аўтар Damien_The_Unbeliever, крыніца
@voithos, я бягу гэта ўручную ў MS SQL Server Management Studio. Іншымі словамі, адкрыць файл .sql і націсніце Выканаць.
дададзена аўтар PowerUser, крыніца
@voithos, я бягу гэта ўручную ў MS SQL Server Management Studio. Іншымі словамі, адкрыць файл .sql і націсніце Выканаць.
дададзена аўтар PowerUser, крыніца
@voithos, я бягу гэта ўручную ў MS SQL Server Management Studio. Іншымі словамі, адкрыць файл .sql і націсніце Выканаць.
дададзена аўтар PowerUser, крыніца
Прывітанне ўсім, усё гэта гучыць як добры савет, які я буду хачу паспрабаваць, калі ў мяне ёсць час. Але я быў у крызісны час ўчора. @DanBracuk, я пайшоў з вашым прапановай.
дададзена аўтар PowerUser, крыніца
Прывітанне ўсім, усё гэта гучыць як добры савет, які я буду хачу паспрабаваць, калі ў мяне ёсць час. Але я быў у крызісны час ўчора. @DanBracuk, я пайшоў з вашым прапановай.
дададзена аўтар PowerUser, крыніца
Прывітанне ўсім, усё гэта гучыць як добры савет, які я буду хачу паспрабаваць, калі ў мяне ёсць час. Але я быў у крызісны час ўчора. @DanBracuk, я пайшоў з вашым прапановай.
дададзена аўтар PowerUser, крыніца
Вы можаце паглядзець на SSIS Калі ў вас ёсць у вашым серверы.
дададзена аўтар Justin, крыніца
Вы можаце паглядзець на SSIS Калі ў вас ёсць у вашым серверы.
дададзена аўтар Justin, крыніца
Паспрабуйце ЦМД @ 'C: /do_stuff.sql'; ў SQL каманды promte. Гэта працуе ў Oracle.
дададзена аўтар VKPRO, крыніца
Паспрабуйце ЦМД @ 'C: /do_stuff.sql'; ў SQL каманды promte. Гэта працуе ў Oracle.
дададзена аўтар VKPRO, крыніца

10 адказы

Калі вы карыстаецеся Visual Studio вы можаце стварыць праект «База дадзеных SQL сервера». Джгуты праекта вы можаце стварыць скрыпт, які дазволіць вам выканаць вашыя * .sql файлы такім чынам,

 /*
Post-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be appended to the build script.       
 Use SQLCMD syntax to include a file in the post-deployment script.         
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the post-deployment script.       
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

see also. http://candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

1
дададзена

Калі вы карыстаецеся Visual Studio вы можаце стварыць праект «База дадзеных SQL сервера». Джгуты праекта вы можаце стварыць скрыпт, які дазволіць вам выканаць вашыя * .sql файлы такім чынам,

 /*
Post-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be appended to the build script.       
 Use SQLCMD syntax to include a file in the post-deployment script.         
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the post-deployment script.       
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

see also. http://candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

1
дададзена

Калі вы карыстаецеся Visual Studio вы можаце стварыць праект «База дадзеных SQL сервера». Джгуты праекта вы можаце стварыць скрыпт, які дазволіць вам выканаць вашыя * .sql файлы такім чынам,

 /*
Post-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be appended to the build script.       
 Use SQLCMD syntax to include a file in the post-deployment script.         
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the post-deployment script.       
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

see also. http://candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

1
дададзена

Паспрабуйце выкарыстоўваць xp_cmdshell.

 EXEC xp_cmdshell  'sqlcmd -S ' + @ServerName + ' -d ' + @DBName + ' -i ' [email protected]
1
дададзена

Паспрабуйце выкарыстоўваць xp_cmdshell.

 EXEC xp_cmdshell  'sqlcmd -S ' + @ServerName + ' -d ' + @DBName + ' -i ' [email protected]
1
дададзена

Ёсць некаторыя праблемы з бяспекай дазваляе xp_cmdshell ў SQL Server. Вы можаце стварыць CLR зберажоную працэдуру, якая выконвае перададзенае змесціва файла. Гэта CLR захоўваемай працэдуры спецыяльна для гэтай мэты, а не як xp_cmdshell, які можа зрабіць што-небудзь па камандным радку.

праблемы з дазваляючы xp_cmdshell </а>Create CLR stored procedure

0
дададзена

Ёсць некаторыя праблемы з бяспекай дазваляе xp_cmdshell ў SQL Server. Вы можаце стварыць CLR зберажоную працэдуру, якая выконвае перададзенае змесціва файла. Гэта CLR захоўваемай працэдуры спецыяльна для гэтай мэты, а не як xp_cmdshell, які можа зрабіць што-небудзь па камандным радку.

праблемы з дазваляючы xp_cmdshell </а>Create CLR stored procedure

0
дададзена

xp_cmdshell і канкатэнацыя не гуляюць разам прыгожа, часта прыводзіць да «Няправільны сінтаксіс каля" + "» памылка. Гэтак далей Jeotics раствор вышэй вам трэба будзе зрабіць зменную увесь радок вы перадаеце xp_cmdshell (уключаючы двукоссі вакол усяго, што можа змяшчае прабел (напрыклад, путь_к_файл \ імя_файла). Пра гэта гаворыцца ў дакументацыі Microsoft для xp_cmdshell . Іншыя пытанні, вам прыйдзецца змагацца з якімі па змаўчанні настроены для SQL Server, які мае xp_cmdshell інвалідаў, як паказана . Дакументацыя звычайна раіць даваць xp_cmdshell права на занадта шмат людзей, з прычыны таго, што гэты транспартны сродак для тых, хто з malintent, але калі, як я, у вас ёсць карыстальнікі мінімальныя і надзейныя баз дадзеных, то гэта здаецца разумным рашэннем. Адзін апошні пытанне, які патрабуе правільнай канфігурацыі з'яўляецца агент SQL Server, як паказана . Дакументацыя апісвае, што SQL Agent адказвае за планаванне фону (напрыклад, заднія вокны) і прадукцыйнасці аператараў каманднага радка, і г.д ..

DECLARE
    @Server nvarchar (50)
    ,@Database nvarchar(50)
    ,@File nvarchar(100)
    ,@cmd nvarchar(300);

SET @Server = server_name;
SET @Database = database_name;
SET @File = 'C:\your file path with spaces';
SET @cmd = 'sqlcmd -S ' + @Server + ' -d ' + @Database + ' i "' + @File + '"';

EXEC xp_cmdshell @cmd;
0
дададзена

xp_cmdshell і канкатэнацыя не гуляюць разам прыгожа, часта прыводзіць да «Няправільны сінтаксіс каля" + "» памылка. Гэтак далей Jeotics раствор вышэй вам трэба будзе зрабіць зменную увесь радок вы перадаеце xp_cmdshell (уключаючы двукоссі вакол усяго, што можа змяшчае прабел (напрыклад, путь_к_файл \ імя_файла). Пра гэта гаворыцца ў дакументацыі Microsoft для xp_cmdshell . Іншыя пытанні, вам прыйдзецца змагацца з якімі па змаўчанні настроены для SQL Server, які мае xp_cmdshell інвалідаў, як паказана . Дакументацыя звычайна раіць даваць xp_cmdshell права на занадта шмат людзей, з прычыны таго, што гэты транспартны сродак для тых, хто з malintent, але калі, як я, у вас ёсць карыстальнікі мінімальныя і надзейныя баз дадзеных, то гэта здаецца разумным рашэннем. Адзін апошні пытанне, які патрабуе правільнай канфігурацыі з'яўляецца агент SQL Server, як паказана . Дакументацыя апісвае, што SQL Agent адказвае за планаванне фону (напрыклад, заднія вокны) і прадукцыйнасці аператараў каманднага радка, і г.д ..

DECLARE
    @Server nvarchar (50)
    ,@Database nvarchar(50)
    ,@File nvarchar(100)
    ,@cmd nvarchar(300);

SET @Server = server_name;
SET @Database = database_name;
SET @File = 'C:\your file path with spaces';
SET @cmd = 'sqlcmd -S ' + @Server + ' -d ' + @Database + ' i "' + @File + '"';

EXEC xp_cmdshell @cmd;
0
дададзена

xp_cmdshell і канкатэнацыя не гуляюць разам прыгожа, часта прыводзіць да «Няправільны сінтаксіс каля" + "» памылка. Гэтак далей Jeotics раствор вышэй вам трэба будзе зрабіць зменную увесь радок вы перадаеце xp_cmdshell (уключаючы двукоссі вакол усяго, што можа змяшчае прабел (напрыклад, путь_к_файл \ імя_файла). Пра гэта гаворыцца ў дакументацыі Microsoft для xp_cmdshell . Іншыя пытанні, вам прыйдзецца змагацца з якімі па змаўчанні настроены для SQL Server, які мае xp_cmdshell інвалідаў, як паказана . Дакументацыя звычайна раіць даваць xp_cmdshell права на занадта шмат людзей, з прычыны таго, што гэты транспартны сродак для тых, хто з malintent, але калі, як я, у вас ёсць карыстальнікі мінімальныя і надзейныя баз дадзеных, то гэта здаецца разумным рашэннем. Адзін апошні пытанне, які патрабуе правільнай канфігурацыі з'яўляецца агент SQL Server, як паказана . Дакументацыя апісвае, што SQL Agent адказвае за планаванне фону (напрыклад, заднія вокны) і прадукцыйнасці аператараў каманднага радка, і г.д ..

DECLARE
    @Server nvarchar (50)
    ,@Database nvarchar(50)
    ,@File nvarchar(100)
    ,@cmd nvarchar(300);

SET @Server = server_name;
SET @Database = database_name;
SET @File = 'C:\your file path with spaces';
SET @cmd = 'sqlcmd -S ' + @Server + ' -d ' + @Database + ' i "' + @File + '"';

EXEC xp_cmdshell @cmd;
0
дададзена