我需要能够将列添加到将由" user"指定的表中。因此,我想知道将表名动态传递给存储过程可能是什么样子。以下是我已经得到但不知道下一步该去哪里。最终,用户将指定表名和需要清理的各种列"。为此,我想在表中添加新列,然后执行操作。
USE *******
GO
CREATE PROCEDURE [dbo].[MS_FormatSectionData](
@SectionCol varchar(50),
@TwpCol varchar(50),
@TWPDirCol varchar(50),
@RangeCol varchar(50),
@RangeDirCol varchar(50),
@ST_CodeCol varchar(50),
@Cnty_CodeCol varchar(50),
@Mer_CodeCol varchar(50),
@Stg_DB varchar(50),
@Tbl_Name varchar(50)
)
AS
BEGIN TRY
DECLARE @sql_AddStgCol VARCHAR(500)
SET @sql_AddStgCol = 'ALTER TABLE' + @Tbl_Name + 'ADD stgSection VARCHAR(3), stgTownship VARCHAR(3),
stgTownshipDir VARCHAR(1), stgRange VARCHAR(3), stgRangeDir VARCHAR(1), stgSt_Code VARCHAR(2), stgCnty_Code VARCHAR(3),
stgMer_Code VARCHAR(3)'
EXEC(@sql_AddStgCol)
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH
GO
答案 0 :(得分:2)
像xQbert所说 - 添加空格。另外,我建议在QUOTENAME()中包装表名以防止SQL注入并使用sp_executesql
而不是EXEC()
。在这种情况下,它不会有所作为,但通常这是一个很好的做法 - 然后你可以参数化你的查询。
DECLARE @sql_AddStgCol NVARCHAR(1000);
SET @sql_AddStgCol = N'
ALTER TABLE ' + QUOTENAME(@Tbl_Name) + '
ADD stgSection VARCHAR(3),
stgTownship VARCHAR(3),
stgTownshipDir VARCHAR(1),
stgRange VARCHAR(3),
stgRangeDir VARCHAR(1),
stgSt_Code VARCHAR(2),
stgCnty_Code VARCHAR(3),
stgMer_Code VARCHAR(3);';
EXECUTE sp_executesql @sql_AddStgCol;