为什么调用这个存储过程老报错
我创建了个查询某个数据库的所有的存储过程,请看代码:
SQL code
CREATE PROCEDURE [dbo].[spCKtablename]
@dbname VARCHAR(200)
AS
DECLARE @dbsql VARCHAR(MAX)
DECLARE @strsql VARCHAR(MAX)
BEGIN
SET @dbsql='USE '+@dbname
EXEC(@dbsql)
SET @strsql='SELECT name FROM sys.sysobjects WHERE xtype='+'''P'''+'type='+'''P'''+'ORDER BY name'
--SELECT name FROM sys.sysobjects WHERE xtype='P' AND type='P' ORDER BY name
EXEC(@strsql)
END
这个存储过程执行成功了,但是在调用的时候报错:
消息 207,级别 16,状态 1,第 1 行
列名 'U' 无效。
消息 207,级别 16,状态 1,第 1 行
列名 'U' 无效。
我想应该是@strsql里面引号没加对吧,请问正确的应该怎么加引号,或者能将这个动态SQL引号的详细资料介绍给我,谢谢。
------解决方案--------------------'SELECT name FROM sys.sysobjects WHERE xtype=''P'' and type=''P'' ORDER BY '
------解决方案--------------------SET @strsql='SELECT name FROM sys.sysobjects WHERE xtype='+'''P'''+'type='+'''P'''+'ORDER BY name'
改成
SET @strsql=' SELECT name FROM sys.sysobjects WHERE xtype='''P''' and type='''P''' ORDER BY name '
------解决方案--------------------SET @strsql='SELECT name FROM sys.sysobjects WHERE xtype='+'''P'''+'type='+'''P'''+'ORDER BY name'
改成
SET @strsql=' SELECT name FROM sys.sysobjects WHERE xtype=''P'' and type=''P'' ORDER BY name '
------解决方案--------------------'SELECT name FROM sys.sysobjects WHERE xtype='+'''P'''+' and type='+'''P'''+'ORDER BY name'
------解决方案--------------------还有你的@dbname值可能有错,U列名在第二个语句中是没有出现的,应该还是第一个语句中。但是你的第二个语句也不对,一是单引号不对,二是少了一个and。单引号在字符中,两个转义成一个。
------解决方案--------------------SQL code
declare @str varchar(max)
set @str='SELECT name FROM sys.sysobjects WHERE xtype='
+'''P'''+' AND type='+'''P'''+' ORDER BY name'
exec(@str)
------解决方案--------------------
SQL code
declare @str varchar(max)
set @str='SELECT name FROM sys.sysobjects WHERE xtype=''P'''+'AND type=''P'' ORDER BY name'
exec(@str)