INSERT INTO OPENROWSET-Syntax mit Dynamischen T-SQL
Ich fühle mich wie ich gelesen habe jede einzelne Seite online darüber, wie Sie dynamisch erstellen Sie eine Excel-output von einem T-SQL-Skript. Hier ist, was ich habe:
Use Master
GO
EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO
EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO
USE CommercialLending
GO
DECLARE @LoopCounter TINYINT = 1
DECLARE @LoopMaxCount TINYINT = (SELECT COUNT(DISTINCT OFFICER)
FROM CommercialLending.dbo.CMLTrial)
WHILE (1=1)
BEGIN
DECLARE @OfficerName VARCHAR(4000) = (
SELECT OFFICER
FROM (SELECT DISTINCT OFFICER, ROW_NUMBER() OVER (ORDER BY OFFICER) AS rownumber
FROM CommercialLending.dbo.CMLTrial GROUP BY Officer) AS OFFICER
WHERE rownumber = @LoopCounter)
DECLARE @FileName varchar(400) = @OfficerName+ '.xlsx'
DECLARE @FullFileName varchar(400) = 'O:\MIS\Python\Programs\CommercialLending\'+@FileName
DECLARE @CopyFile varchar(800) = 'copy O:\MIS\Python\Programs\CommercialLending\Template.xlsx copy O:\MIS\Python\Programs\CommercialLending\' + @FileName
EXEC xp_cmdshell @CopyFile
DECLARE @sql nvarchar(4000)
SET @sql = 'INSERT INTO OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',Excel 12.0;Database='+@FullFileName+';'',''SELECT * FROM [Sheet1$])'' SELECT * FROM dbo.CMLTrial WHERE Officer='''+@OfficerName+''
EXEC (@sql)
SET @LoopCounter = @LoopCounter+1
IF (@LoopCounter > @LoopMaxCount)
BREAK;
END
Use Master
GO
EXEC master.dbo.sp_configure 'xp_cmdshell', 0
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
EXEC master.dbo.sp_configure 'show advanced options', 0
RECONFIGURE WITH OVERRIDE
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 0
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 0
GO
Ich weiß, dass mein problem in der Zeile, weist INSERT INTO OPENROWSET-string nach dem @sql-variable:
SET @sql = 'INSERT INTO OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',Excel 12.0;Database='+@FullFileName+';'',''SELECT * FROM [Sheet1$])'' SELECT * FROM dbo.CMLTrial WHERE Officer='''+@OfficerName+''
Für das Leben von mir ich kann nicht herausfinden, wo mein syntax-Fehler ist. Kann mir jemand helfen, es herauszufinden, und auch, wenn möglich, eine Anleitung für das herausfinden der standard-syntax für die Verwendung der INSERT INTO OPENROWSET als string in eine variable?
Bitte geben Sie die genauen Werte von
@FullFileName
und @OfficerName
. Potenziell möglicherweise haben Sie ungeschützten '
- Symbole oder andere Symbole, die Ihre Pause @sql
als richtige Zeichenfolge.InformationsquelleAutor BigDevJames | 2014-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Mach ich immer ein PRINT @sql bei der Arbeit mit dynamischen Skripten, um zu sehen, wie die Abfrage Aussehen wird. Es ist leichter zu beheben, und spart mir jede Menge Kummer später.
InformationsquelleAutor jascan