怎样插入动态字段名的值?

ahcorelax 2013-08-17 03:48:20
sql2000的环境下,
一般插入数据都是字段名对应变量,例如
INSERT INTO Tc_Pomain_shed_bydate (ID,dateshed1)
VALUES (@ID,@dateshed1)

现在我碰到的问题是假如一组字段名是动态的,怎样插入数据呢?
示意如下:
INSERT INTO Tc_Pomain_shed_bydate (ID,@listname1,@listname2,@listname3,......)
VALUES (@ID,@dateshed1,@dateshed1,@dateshed1,......)

当然上面的语句在sql2000里是执行不成功的,

如何解决这样的问题呢?


...全文
159 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahcorelax 2013-08-17
  • 打赏
  • 举报
回复
其他几位朋友也非常感谢,但不知道是不是没有刷新的缘故,有些朋友的回复没有及时看到。
ahcorelax 2013-08-17
  • 打赏
  • 举报
回复
declare @sql nvarchar(4000),@row INT,@listname VARCHAR(20),@dateshed2 DECIMAL(18,2),@id INT set @sql='' SET @row = 2 SET @listname = 'dateshed' + RTRIM(CAST(@row AS VARCHAR(2))) SET @ID = 2 SET @dateshed2 = 2.2 set @sql='INSERT INTO Tc_Pomain_shed_bydate (ID,'+@listname+') VALUES ('+cast(@ID as varchar)+','+cast(@dateshed2 as varchar)+')' print @sql exec (@sql); 贴一下我最终测试的结果,你给的语句中在我的环境中测试还少了一个(),但还是非常感谢你!
Shawn 2013-08-17
  • 打赏
  • 举报
回复
--像这样的应用,只能拼SQL
DECLARE @listname1 NVARCHAR(255), @listname2 NVARCHAR(255), @listname3 NVARCHAR(255)
DECLARE @ID INT, @dateshed1 VARCHAR(100)

DECLARE @sql NVARCHAR(MAX)
SET @sql=N'
INSERT INTO Tc_Pomain_shed_bydate (ID,{listname1},{listname2},{listname3})
VALUES (@ID,@dateshed1,@dateshed1,@dateshed1)
'
SET @sql = REPLACE(@sql, '{listname1}', @listname1)
SET @sql = REPLACE(@sql, '{listname2}', @listname2)
SET @sql = REPLACE(@sql, '{listname3}', @listname3)
--print @sql
EXEC sp_executesql @sql, N'@ID int,@dateshed1 varchar(100)', @dateshed1
Andy__Huang 2013-08-17
  • 打赏
  • 举报
回复
declare @sql nvarchar(4000),@row INT,@listname VARCHAR(20),@dateshed2 DECIMAL(18,2),@id INT 
set @sql=''
SET @row = 2
SET @listname = 'dateshed' + RTRIM(CAST(@row AS VARCHAR(2)))
SET @ID = 2
SET @dateshed2 = 2.2

set @sql='INSERT INTO Tc_Pomain_shed_bydate (ID,'+@listname+')
  VALUES ('+cast(@ID as varchar)+','+cast(@dateshed2 as varchar)+')'
print @sql
exec @sql
ahcorelax 2013-08-17
  • 打赏
  • 举报
回复
测试所用ID,int型; dateshed2,decimal型;
ahcorelax 2013-08-17
  • 打赏
  • 举报
回复
declare @sql nvarchar(4000),@row INT,@listname VARCHAR(20),@dateshed2 DECIMAL(18,2),@id INT set @sql='' SET @row = 2 SET @listname = 'dateshed' + RTRIM(CAST(@row AS VARCHAR(2))) SET @ID = 2 SET @dateshed2 = 2.2 set @sql='INSERT INTO Tc_Pomain_shed_bydate (ID,'+@listname+') VALUES ('+@ID+','+@dateshed2+')' print @sql exec @sql 报错: 将 varchar 值 'INSERT INTO Tc_Pomain_shed_bydate (ID,dateshed2) VALUES (' 转换为数据类型为 int 的列时发生语法错误。 明知道应该是引号的位置错了,或者使用的引号错了,真是非常抱歉,还有请教你。 同时也对你深表感谢!
Andy__Huang 2013-08-17
  • 打赏
  • 举报
回复
declare @sql nvarchar(4000) set @sql='' set @sql='INSERT INTO Tc_Pomain_shed_bydate (ID,'+@listname1+','+@listname2+','+@listname3',......) VALUES ('+@ID+','+@dateshed1+','+@dateshed1+','+@dateshed1+','+......)'' print @sql exec @sql 注意如果是字符串类型,改加单引号
lzw_0736 2013-08-17
  • 打赏
  • 举报
回复
DECLARE @sql VARCHAR(MAX) SET @sql= 'INSERT INTO Tc_Pomain_shed_bydate (ID,'+@listname1+','+@listname2+','+@listname3+ ') VALUES ('+ RTRIM(@ID)+','+RTRIM(@dateshed1)+','+RTRIM(@dateshed2)+','+RTRIM(@dateshed3)+')' EXEC(@sql)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧