Sql server 2008 在SQL Server中使用sp_executesql更新表

Sql server 2008 在SQL Server中使用sp_executesql更新表,sql-server-2008,Sql Server 2008,有人能帮忙处理这个案子吗?如何使用动态查询插入到表中 DECLARE @TypeCode varchar(25), @BomDateB varchar(25), @BomDateA varchar(25), @TbName varchar(25), @SQL varchar(max) SET @TypeCode = 'PS-BPRG15AGW' SET @TbName = 'z'+@TypeCode SET @BomDateB = '8/19/2016

有人能帮忙处理这个案子吗?如何使用动态查询插入到表中

DECLARE
    @TypeCode varchar(25),
    @BomDateB varchar(25),
    @BomDateA varchar(25),
    @TbName varchar(25),
    @SQL varchar(max)

SET @TypeCode = 'PS-BPRG15AGW'
SET @TbName = 'z'+@TypeCode 
SET @BomDateB = '8/19/2016'
SET @BomDateA = '8/20/2016'

SET @SQL = 'UPDATE [PMLite].[dbo].['+@TbName+']
            SET [BOM Date] = '+@BomDateA+'
            WHERE [BOM Date] = '+@BomDateB+''

EXEC sp_executesql @SQL

你的@
SQL
应该是
NVARCHAR

所以像下面这样改变

Declare @Sql NVARCHAR(4000)
最后,代码中会出现一些错误,…所以

像这样改变日期

SET [BOM Date] = '+@BomDateA+'


这将是执行更新的正确方法:

DECLARE @TypeCode VARCHAR(25)
    , @BomDateB VARCHAR(25)
    , @BomDateA VARCHAR(25)
    , @TbName NVARCHAR(25)
    , @SQL NVARCHAR(MAX);

SET @TypeCode = N'PS-BPRG15AGW';
SET @TbName = N'z' + @TypeCode;
SET @BomDateB = '8/19/2016';
SET @BomDateA = '8/20/2016';

SET @SQL = N'
    UPDATE [PMLite].[dbo].' + QUOTENAME(@TbName) + '
    SET [BOM Date] = CONVERT(NVARCHAR(24), @BomDateA, 121)
    WHERE [BOM Date] = CONVERT(NVARCHAR(24), @BomDateB, 121);';

EXEC sp_executesql @SQL
    , N'@BomDateB VARCHAR(25), @BomDateA VARCHAR(25)'
    , @BomDateB
    , @BomDateA;
正如我在评论中所说,不要在动态SQL不是绝对需要的时候使用它(请参见
@BomDateA
@BomDateB
参数)

不要用括号括起文本,而是使用。此内置函数用于将对象名称包装到括号中,并保护代码的安全性

摘自文件:

QUOTENAME(Transact-SQL) 返回一个Unicode字符串,其中添加了分隔符以进行输入 字符串一个有效的SQL Server分隔标识符


到底是什么问题?您正在插入或更新吗?您提供的查询出现了一些错误?有这样的错误。“Msg 214,级别16,状态2,过程sp_executesql,第1行过程需要类型为'ntext/nchar/nvarchar'的参数'@statement'。”我想用动态表名n参数更新表这也不对。。。你应该使用正确的参数,而不是字符串连接
DECLARE @TypeCode VARCHAR(25)
    , @BomDateB VARCHAR(25)
    , @BomDateA VARCHAR(25)
    , @TbName NVARCHAR(25)
    , @SQL NVARCHAR(MAX);

SET @TypeCode = N'PS-BPRG15AGW';
SET @TbName = N'z' + @TypeCode;
SET @BomDateB = '8/19/2016';
SET @BomDateA = '8/20/2016';

SET @SQL = N'
    UPDATE [PMLite].[dbo].' + QUOTENAME(@TbName) + '
    SET [BOM Date] = CONVERT(NVARCHAR(24), @BomDateA, 121)
    WHERE [BOM Date] = CONVERT(NVARCHAR(24), @BomDateB, 121);';

EXEC sp_executesql @SQL
    , N'@BomDateB VARCHAR(25), @BomDateA VARCHAR(25)'
    , @BomDateB
    , @BomDateA;