Sql server SQL Server将参数化名称表插入到(如果存在)

Sql server SQL Server将参数化名称表插入到(如果存在),sql-server,stored-procedures,Sql Server,Stored Procedures,我想将@inputData插入到ColumnData中,如果它不存在,以防止将数据复制到名为参数的表中@TableName。“dbo@TableName”处出错 SET @insertSQL = 'INSERT INTO '+ @TableName + ' (ColumnData) VALUES ('''+@inputData+''');' IF NOT EXISTS (SELECT 1 FROM [dbo].[@TableName] WHERE ColumnData = @inputData

我想将
@inputData
插入到
ColumnData
中,如果它不存在,以防止将数据复制到名为参数的表中
@TableName
。“dbo@TableName”处出错

SET @insertSQL = 'INSERT INTO '+ @TableName + ' (ColumnData) VALUES ('''+@inputData+''');'

IF NOT EXISTS (SELECT 1 FROM [dbo].[@TableName] WHERE ColumnData = @inputData)
    EXECUTE(@insertData) -- EXECUTE @insertData if ColumnData is not found
我也试过这个(也会抛出错误):


看起来您正在拆分动态SQL语句。试着这样做:

DECLARE @SQL NVARCHAR(MAX) = N'
IF NOT EXISTS (SELECT 1 FROM dbo.' + QUOTENAME(@TableName)  + ' WHERE ColumnData = @inputData
   INSERT INTO ' + QUOTENAME(@TableName) + ' (ColumnData) VALUES (@inputData)'

EXEC sp_executesql @SQL, N'@inputData VARCHAR(128)', @inputData = @inputData
表名,因此必须将其追加。但是,强烈建议您避免SQL注入

另一方面,@inputData可以作为参数发送,这就是为什么可以使用
sp_executesql


一般来说,除非您不处理参数,否则请尝试始终使用
sp_executesql
而不是简单的
EXEC()
,因为
EXEC
强制执行难看的字符串连接和可能的可注入SQL语句。

您会遇到什么错误?是否可以共享屏幕截图?如果存在替换为如果不存在..对象名称“dbo@Tablename”无效--@Tablename未传递参数,而是使用“@Tablename”作为其表名
DECLARE @SQL NVARCHAR(MAX) = N'
IF NOT EXISTS (SELECT 1 FROM dbo.' + QUOTENAME(@TableName)  + ' WHERE ColumnData = @inputData
   INSERT INTO ' + QUOTENAME(@TableName) + ' (ColumnData) VALUES (@inputData)'

EXEC sp_executesql @SQL, N'@inputData VARCHAR(128)', @inputData = @inputData