MSSQL:将execute语句的值与表中的另一个字符串一起插入

时间:2013-02-04 08:31:00

标签: sql-server

我有什么

我目前正在将当前目录中的所有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 :(得分: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*')

答案 1 :(得分: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