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;