你能帮我在存储过程中编写和执行动态 SQL 语句吗?
我需要在我的数据库中导入很多文件。为了完成这项工作,我使用了“批量插入”。 所以我创建了一个参数表来存储我需要创建一个动态“批量插入”的参数,具体取决于我插入的文件。
当用户想要修改或添加新文件以插入到表中时,该表供用户使用。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_Alim_Sas_MCP_Files]
@FileSource NVARCHAR(100)
AS
BEGIN
DECLARE @SQL NVARCHAR(4000)
DECLARE @SQL_ NVARCHAR(4000)
SET @SQL =''
SELECT @SQL + 'TRUNCATE TABLE [Ods].[SRC_MCP_Files];
BULK INSERT [Ods].[Src_MCP_Files]
FROM ''' + [FileSource] + '''
WITH
(DATA_SOURCE = ''' + [DataSource] +''',
DATAFILETYPE = ''' + [DataFileType] + ''',
FIELDTERMINATOR = ''' + [FieldTerminator] + ''',
ROWTERMINATOR = ''' + [RowTerminator]+ ''',
CODEPAGE = ' + CAST([CodePage] AS NVARCHAR(10))+ ',
FIRSTROW = ' + CAST([FirstRow] AS NVARCHAR(10)) +',
TABLOCK
);
INSERT INTO [Ods].[Sas_MCP_Files]
(ResponseCode, [CountryCode], [CountryLabel], Code, Label,
Lang, Lang_2, [DateExtraction], [IdDateExtraction])
SELECT ResponseCode = ResponseCode+''_''+ [CountryCode] + ''_''+Code ,
[CountryCode]
,[CountryLabel]
,Code
, Label
, Lang
, Lang_2
,[DateExtraction]= getdate ()
,[IdDateExtraction] = convert(int,convert(varchar,getdate(),112))
FROM [Ods].[SRC_MCP_Files] '
FROM [Config].[File_Parameters]
WHERE FileSource = @FileSource
EXEC (@SQL)
END;
EXEC [dbo].[usp_Alim_Sas_MCP_Files] 'temp/mcp/Accompagnists_2.csv'
我希望存储过程执行其中的 Bulk Insert
脚本。
最佳答案
不可能重现您的问题,但有一个通用技巧可以很好地调试任何 SQL 动态问题。 只需修改您的 SP,之后:
SET @SQL_ = ' EXEC ''' + @SQL + ' ;'
插入一行:
PRINT @SQL;
您将看到正在启动的真实命令。然后,在名为“消息”的选项卡中,您可以复制该代码,粘贴到另一个查询窗口并运行它以了解问题所在。
关于sql-server - 如何在存储过程中执行动态SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53928291/