INSÉREZ DANS OPENROWSET Syntaxe Dynamique avec T-SQL
Je me sens comme j'ai lu chaque page en ligne sur la façon de créer dynamiquement une sortie Excel à partir d'un script T-SQL. Voici ce que j'ai:
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
Je sais que mon problème est dans la ligne qui attribue l'INSERTION DANS la fonction OPENROWSET chaîne à la @variable sql:
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+''
Pour la vie de moi je ne peux pas comprendre d'où mon erreur de syntaxe est. Quelqu'un peut-il m'aider à comprendre, et aussi, si possible, de fournir un guide pour comprendre la syntaxe standard pour l'utilisation de l'INSÉRER DANS OPENROWSET comme une chaîne de caractères dans une variable?
- S'il vous plaît, fournir les valeurs exactes de
@FullFileName
et@OfficerName
. Potentiellement, vous pouvez avoir non protégés'
des symboles ou d'autres symboles qui rupture votre@sql
comme correcte de la chaîne.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Je fais toujours une IMPRESSION de @sql lorsque l'on travaille avec dynamique de scripts pour voir comment le réel de la requête ressemblera. Il est plus facile de résoudre les problèmes et me permet d'économiser beaucoup de chagrin plus tard.