2013-02-04 17 views
1

我有什么MSSQL:在一个表中与另一个字符串一起执行语句插入值

我目前将在一个临时表中的当前目录中的所有SQL文件:

create table #tmpSQLFiles(SQLFileName varchar(max)) 
set @SqlStatement = 'master.dbo.xp_cmdshell ''dir /b "' + @DirPath + '*.sql"''' 

insert into #tmpSQLFiles 
execute (@SqlStatement) 

这很好。

我想

现在我想的表有一个额外的varchar列中,我可以存储一定所需的字符串什么:

create table #tmpSQLFiles(SQLFileName varchar(max), MyString varchar(max)) 
set @SqlStatement = 'master.dbo.xp_cmdshell ''dir /b "' + @DirPath+ '*.sql"''' 

我已经试过

我该如何做插入?我曾尝试:

insert into #tmpSQLFiles (SQLFileName, MyString) values (execute (@SqlStatement), 'aa') 

或:

declare @ExecutedStmt varchar(max) 
set @ExecutedStmt = execute (@SqlStatement) 
-- But the above line is not correct. 

任何这些2会为我工作。我不想插入和更新第二列。

关于我如何实现这一点的任何想法?谢谢 !

+0

您尝试使用第二个模块时出现了什么错误? “set @ExecutedStmt = execute(@SqlStatement)” – callisto

+0

单词execute附近的语法错误。 –

+0

'MyString'对每一行都是相同的字符串吗? –

回答

2

尝试使用表变量作为中介 - 不是最漂亮的,但这项工作:

create table #tmpSQLFiles(SQLFileName varchar(max), MyString varchar(max)) 
set @SqlStatement = 'master.dbo.xp_cmdshell ''dir /b "' + @DirPath + '*.pdf"''' 

DECLARE @TempOutpt TABLE ([output] varchar(500)) 
insert into @TempOutpt ([output]) 
execute (@SqlStatement) 

insert into #tmpSQLFiles (SQLFileName, MyString) 
select [output], 'my string here' from @TempOutpt 

select * from #tmpSQLFiles 

如果你不使用扩展存储过程(xp_cmdshell),你可能已经能够使用OPENROWSET执行SP:

SELECT *fields* 
FROM OPENROWSET('SQLNCLI', 
       'Server=*your_server*;Trusted_Connection=yes;Database=*your_database*', 
       'exec *stored_procedure* *parameters*') 
+0

这个伎俩。谢谢 ! –

0

您需要使用一个输出参数,所以你可以使用在接下来的INSERT的结果:

DECLARE @result INT, @sql NVARCHAR(512) 

    SET @sql = N'SELECT @result = COUNT(*) FROM ' + @dbname + '.INFORMATION_SCHEMA.TABLES' 

    EXEC sp_executesql 
     @query = @sql, 
     @params = N'@result INT OUTPUT', 
     @result = @result OUTPUT 

    PRINT @result 
+0

我正在执行一个Windows命令,不是存储过程。我仍然可以以相同的方式使用它吗? –

+0

如果问题的第一部分有效,我相信也会这样。由于从EXEC语句获取输出是一个2阶段的过程,因此最好在循环中执行它。 – callisto

相关问题