1

是)我有的

我目前正在将当前目录中的所有 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.

这两个中的任何一个都对我有用。我不想在第二列之后插入和更新。

关于如何实现这一目标的任何想法?谢谢 !

4

2 回答 2

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*')
于 2013-02-04T10:44:54.667 回答
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
于 2013-02-04T09:15:36.170 回答