我动态创建了一个insert语句,但是出现msg128的问题
代码如下
SET @sqlStr = N'INSERT INTO [dbo].[@name] VALUES(@conName,@message,GETDATE());';
EXEC sp_executesql @sqlStr,N'@name USERNAME,@conName USERNAME,@message nvarchar(500)',@name,@conName,@message;
其中USERNAME是我自定义的类型nvarchar(30).
出现如下问题Msg 208, Level 16, State 1, Line 1
对象名 'dbo.@name' 无效。这该怎么办
代码如下
SET @sqlStr = N'INSERT INTO [dbo].[@name] VALUES(@conName,@message,GETDATE());';
EXEC sp_executesql @sqlStr,N'@name USERNAME,@conName USERNAME,@message nvarchar(500)',@name,@conName,@message;
其中USERNAME是我自定义的类型nvarchar(30).
出现如下问题Msg 208, Level 16, State 1, Line 1
对象名 'dbo.@name' 无效。这该怎么办
解决方案 »
- 两表联合查询,一表聚合后和另一个表做比较该怎么写?
- 查詢有關日期問題, 求sql command
- [请教]插入新的记录时 如何自动更新标识列
- 如何从一个表的两列中查出一列中的内容在另一列的位置;
- sqlserver2005 报告18456错误 用户sa登录失败
- sql作业问题!
- SQLSERVER数据库问题 请各位牛人帮忙看看如何解决 急!!!
- 各位知道sql server的单表容量有多大?回答的都有分。。。。
- 如何选程接连sql server数据库
- 超简单的问题:如何判断一个游标已经存在?(在上一次执行时由于关闭游标和释放游标没有执行)
- 恢复sql2008数据库时想减少mdf文件和ldf文件
- sql 查询问题
SET @sqlStr = N'INSERT INTO [dbo].['+@name+'] VALUES('+@conName+','+@message+',GETDATE());';EXEC sp_executesql @sqlStr,N'@name USERNAME,@conName USERNAME,@message nvarchar(500)',@name,@conName,@message;
这里~~
这个 需要 动态执行的 啊,
我是新手,我自己试着写一个 数据库
我会根据用户的用户名来创建一个 用它的名字命名 的表,
所以我必须动态执行,或许我还有什么别的方法吗?
你说要把定义的语句加进去 我不是很理解,很多例子上没有把定义的加进去的啊,而且为什么偏偏是这个@name出问题呢
不能把那个理解为一个简单的字符串吗。但是我声明 @name 的时候是nvarchar(30).
唉 还是不能理解
感觉 这sql语言 实在是不怎么好理解,没有 c或cpp那么 清晰 明确 啊
原来在动态执行语句是 系统会把 FROM后面的变量 @name当作表变量,而不是当作字符变量,因此就会出错了。
所以我 在调用 sp_executesql之前就把@name变量带入得到sqlStr这样就不会被系统搞错了。结果就好了 哈哈。
太谢谢版主了,你都帮我回答过好几个问题了。小弟不胜感激
不过不得不对sql吐槽一下。这个语言设计的似乎没有那么严谨 啊 。呵呵 一家之言