declare @showkey varchar(100)
declare @string varchar(100)
DECLARE @TableName VARCHAR(1000)
SET @TableName='temptable'
SET @showkey='SELECT '+'Keyword '+'FROM '+@TableName+' WHERE id=78'
exec(@showkey)
PRINT @showkey
--到这里都显示的结果为 类似 |xx|xx|xx|xx|
SET @string=@showkey
PRINT @string
--到这里都显示的结果为 类似 |xx|xx|xx|xx|select * from dbo.LewiSplitID(@string,'|')
PRINT @string
--到这里却变直接变成了 SELECT Keyword FROM News WHERE ID=78
为何他没有正确将 ¦xx ¦xx ¦xx ¦xx ¦的值正确的传入 @string 呢,而是直接传进来了查询语句附上函数.CREATE
FUNCTION [dbo].[LewiSplitID](@String NVARCHAR(4000), @SplitChar NVARCHAR(10))
RETURNS @table TABLE (ID VARCHAR (100)) AS
BEGIN
DECLARE @Index INT
SET @Index = 0
IF @String <> ''
BEGIN
IF RIGHT(@String,1)<> @SplitChar
SET @String = @String + @SplitChar
IF LEFT(@String,1)= @SplitChar
SET @String = STUFF(@String, 1, 1, '')
End
WHILE CHARINDEX(@SplitChar,@String,@Index) > 0
BEGIN
INSERT INTO @table(ID)
VALUES (SUBSTRING(@String, @Index, CHARINDEX(@SplitChar, @String,@Index) - @Index))
SET @index = CHARINDEX(@SplitChar, @String, @Index) + 1
END
RETURN
END
恳请老师帮忙解答,想了一个晚上 ,不知道错哪儿了!
--函数不用修改。try:declare @showkey nvarchar(100)
declare @string varchar(100)
DECLARE @TableName VARCHAR(1000)
SET @TableName='temptable'
SET @showkey='SELECT @key=Keyword FROM '+@TableName+' WHERE id=78'
exec sp_executesql @showkey,N'@key varchar(100) output',@string output
select * from dbo.LewiSplitID(@string,'|')
多谢老师指点!问题成功得到解决!
SET @showkey='SELECT @key=Keyword FROM '+@TableName+' WHERE id=78'
exec sp_executesql @showkey,N'@key varchar(100) output',@string output
--这两句一定要好好琢磨,还看不懂.
动态sql语句基本语法1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec(select * from tableName)
Exec sp_executesql Nselect * from tableName -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = FiledName
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec(select + @fname + from tableName) -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = FiledName --设置字段名 declare @s varchar(1000)
set @s = select + @fname + from tableName
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = select + @fname + from tableName
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls=select count(*) from tableName
exec(@sqls)
--如何将exec执行结果放入变量中? declare @num int,
@sqls nvarchar(4000)
set @sqls=select @a=count(*) from tableName
exec sp_executesql @sqls,N@a int output,@num output
select @num
严重了。
ps:周末不愉快。现在还在加班ing........又怎愉快的起来?