declare @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' exec(''select * from tea_base where name=@0'')'
exec(@sql1+@sql2+@sql3)
出现错误变量@0未定义,帮忙改改
急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' exec(''select * from tea_base where name=@0'')'
exec(@sql1+@sql2+@sql3)
出现错误变量@0未定义,帮忙改改
急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
解决方案 »
- 请教存储过程,如何对它进行调试?
- 多台服务器的的SQL查找语句
- 这样的语句如何写?
- 一个表内容更新的问题
- 成都那里有好点的数据库设计培训啊?谢谢!
- 菜鸟求教一简单排序,感谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 在WindowXP下为什么无法启动MySql?
- 再次开帖,只求弄懂这个问题,还请大力,邹建,马可,j9988,victorycyz...等各位大哥帮我看看!
- 菜鸟请教有关SQL SERVER的简单问题
- 可以将备份的数据库(后缀名为bak)采用附加的方式吗?
- 在批处理中,用DCP命令和FMT文件去掉字段空格
- 快速查出包含条件内容
http://technet.microsoft.com/zh-cn/library/ms175874.aspx常规标识符格式规则取决于数据库兼容级别。该级别可以使用 sp_dbcmptlevel 设置。当兼容级别为 90 时,下列规则适用: 第一个字符必须是下列字符之一: Unicode 标准 3.2 所定义的字母。Unicode 中定义的字母包括拉丁字符 a-z 和 A-Z,以及来自其他语言的字母字符。下划线 (_)、at 符号 (@) 或数字符号 (#)。
在 SQL Server 中,某些位于标识符开头位置的符号具有特殊意义。以 at 符号开头的常规标识符始终表示局部变量或参数,并且不能用作任何其他类型的对象的名称。以一个数字符号开头的标识符表示临时表或过程。以两个数字符号 (##) 开头的标识符表示全局临时对象。虽然数字符号或两个数字符号字符可用作其他类型对象名的开头,但是我们建议不要这样做。
某些 Transact-SQL 函数的名称以两个 at 符号 (@@) 开头。为了避免与这些函数混淆,不应使用以 @@ 开头的名称。 后续字符可以包括: 如 Unicode 标准 3.2 中所定义的字母。基本拉丁字符或其他国家/地区字符中的十进制数字。at 符号、美元符号 ($)、数字符号或下划线。标识符一定不能是 Transact-SQL 保留字。SQL Server 可以保留大写形式和小写形式的保留字。不允许嵌入空格或其他特殊字符。不允许使用增补字符。在 Transact-SQL 语句中使用标识符时,不符合这些规则的标识符必须由双引号或括号分隔
declare @A0 varchar(10)
试试
declare @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
select @sql1=' declare @A0 varchar(100)',
@sql2=' select @A0=name from tea_base where id=50',
@sql3=' exec(''select * from tea_base where name=@A0'')'
exec(@sql1+@sql2+@sql3)
declare @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' select * from tea_base where name=@0'
exec(@sql1+@sql2+@sql3)
没有这说法吧..
他的错是在sql串里面用了exec
变量开头并不是必须用字母to perfectaction
我主要是要用最后一句,实际上用exec()是可以的,不过我不太明白格式如何弄正确罢了 给大家一个正确的例子 帮我看看
--生成数据处理语句
SELECT
@sqlhead=N''''
+REPLACE(N'SELECT [xtype]',N'''',N'''''')
+'''',
@sqlend=N''''
+REPLACE(N' FROM [syscolumns] GROUP BY [xtype]',N'''',N'''''')
+N'''',
@sql1=N'',@sql2=N'',@sql3=N'',@sql4=N''
WHILE @ic>=0
SELECT
@sql1=N',@'+@ic+N' nvarchar(4000)'+@sql1,
@sql2=N',@'+@ic+N'=N'''''+@sql2,
@sql3=N',@'+@ic
+N'=CASE g WHEN '+@ic
+N' THEN @'+@ic+N'+a ELSE @'+@ic
+N' END'+@sql3,
@sql4=N'+@'+@ic+@sql4,
@ic=@ic-1
SELECT
@sql1=STUFF(@sql1,1,1,N''),
@sql2=STUFF(@sql2,1,1,N''),
@sql3=STUFF(@sql3,1,1,N''),
@sql4=STUFF(@sql4,1,1,N'')
print @sql1
print @sql2
print @sql3
print @sql4
print @sqlhead+N'+'+@sql4+N'+N'+@sqlend
--执行
EXEC(N'DECLARE '+@sql1+N'
SELECT '+@sql2+N'
SELECT '+@sql3+N' FROM #
EXEC(N'+@sqlhead+N'+'+@sql4+N'+N'+@sqlend+N')')
--删除临时表
DROP TABLE # 我看不懂 EXEC(N'DECLARE '+@sql1+N'
SELECT '+@sql2+N'
SELECT '+@sql3+N' FROM #
EXEC(N'+@sqlhead+N'+'+@sql4+N'+N'+@sqlend+N')')
我写出来总是出错
干脆写你自己要写的sql吧
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' exec(''select * from tea_base where name=@0'')'
exec(@sql1+@sql2+@sql3)
-------------
动态变量里面不是使用外部的定义的局部变量,
变量的作用域问题.PS:
测试了一下,变量可以使用@+数字.
只是感觉怪怪的而已.
收回2楼的话,declare @0 varchar(10)
select @0 ='aaaa'
select @0 as col
/*
col
----------
aaaa
(1 row(s) affected)*/
declare @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' exec(''select * from tea_base where name=''+@0)'
exec(@sql1+@sql2+@sql3)
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' select * from tea_base where name=@0'
exec(@sql1+@sql2+@sql3)
改成这样就成了吧?为什么要@sql3=' exec(''select * from tea_base where name=@A0'这样呢???
自己print出来看看有什么问题.
declare @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' exec(''select * from tea_base where name=''+@0)'
--exec(@sql1+@sql2+@sql3)
print @sql1+@sql2+@sql3
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' exec(''select * from tea_base where name=''''''+@0+'''''''')'
select @sql1+@sql2+@sql3
--@sql3中为执行动态语句,不能直接引用外边的变量,必须将变量@0转为字段串
declare @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
select @sql1=' declare @0 varchar(100)',
@sql2=' select @0=name from tea_base where id=50',
@sql3=' exec(''select * from tea_base where name=''''''+@0+'''''''')'
exec(@sql1+@sql2+@sql3)
@sqlstr='declare @tmp_name varchar(100);'
@sqlstr=@sqlstr+'select @tmp_name=name from tea_base where id=50;'
@sqlstr=@sqlstr+'select * from tea_base where name=@0'
exec(@sqlstr)
@sqlstr='declare @tmp_name varchar(100);'
@sqlstr=@sqlstr+'select @tmp_name=name from tea_base where id=50;'
@sqlstr=@sqlstr+'select * from tea_base where name=@tmp_name'
exec(@sqlstr)