SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
use OnlineSuscribeSystem
go
-- =============================================
-- Author: 王琳
-- Create date: 2007.5.9
-- Description: 通过某一字段和表获得另一个某一个字段
-- =============================================
CREATE PROCEDURE GetFieldById
-- Add the parameters for the stored procedure here
@TableName varchar(50),
@IdName varchar(50),
@IdValue int,
@FieldName varchar(50),
@FieldValue varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
-- Insert statements for procedure here
select @FieldValue=@FieldName from @TableName where @IdName=@IdValue
END
GO
不知道为什么,总是提示"必须声明标量变量 "@TableName"。"
GO
SET QUOTED_IDENTIFIER ON
GO
use OnlineSuscribeSystem
go
-- =============================================
-- Author: 王琳
-- Create date: 2007.5.9
-- Description: 通过某一字段和表获得另一个某一个字段
-- =============================================
CREATE PROCEDURE GetFieldById
-- Add the parameters for the stored procedure here
@TableName varchar(50),
@IdName varchar(50),
@IdValue int,
@FieldName varchar(50),
@FieldValue varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
-- Insert statements for procedure here
select @FieldValue=@FieldName from @TableName where @IdName=@IdValue
END
GO
不知道为什么,总是提示"必须声明标量变量 "@TableName"。"
解决方案 »
- 正确高效的编写sql语句的境界是将一个复杂问题分解成一个一个简单的小问题。
- 求高手帮改进按开头字母拼音查询sql语句
- 下表如何设置主键!??
- SQL Command
- 急!将远程的数据库导出到本地数据库时遇到“将对象从 Microsoft SQL Server复制到Microsoft SQL Server时失败”,
- SQL Server 2005 Express 的 Management Studio 工具中,竟然找不到搞数据库维护规划的功能了,我想设置定时备份啊。
- 求助!一个表更新的问题
- 求一条语句,非常简单的一条.
- 10
- SQL 比较两个数据库表结构差异,并生成差异结构SQL脚本
- 问两个简单的问题!
- 求助 安装MS sqlserver2000 的时候 遇到如下的问题 全文检索引擎包的安装失败
exec sp_executesql @sql
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
动态sql语句基本语法
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * 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
可改成动态语句
呵呵,在这里能有那么多那么热衷的朋友在这里帮我解决问题,我非常感激
-- Add the parameters for the stored procedure here
@TableName varchar(50),
@IdName varchar(50),
@IdValue int,
@FieldName varchar(50),
@FieldValue varchar(50) out
AS
BEGIN
exec('select @FieldValue=@FieldName from @TableName where @IdName=@IdValue')
END
我改成这样的了,但是调用还是会出错
set @sql='select @a=' + @FieldName + ' from ' + @TableName + ' where ' + @IdName + '=''' + @IdValue '''' exec sp_executesql @sql,N'@a varchar output',@FieldValue output select @FieldValue
没有你讲的sp_executesql扩展存储过程
代码如下:
ALTER PROCEDURE [dbo].[GetFieldById]
-- Add the parameters for the stored procedure here
@TableName varchar(50),
@IdName varchar(50),
@IdValue int,
@FieldName varchar(50),
@FieldValue varchar(50) out
AS
BEGIN
declare @sql nvarchar(4000)
set @sql='select '+@FieldValue+'='+@FieldName+ ' from '+@TableName+' where '+@IdName+'='+@IdValue
exec @sql
END
ALTER PROCEDURE [dbo].[GetFieldById]
-- Add the parameters for the stored procedure here
@TableName varchar(50),
@IdName varchar(50),
@IdValue int,
@FieldName varchar(50),
@FieldValue varchar(50) out
AS
BEGIN
declare @sql nvarchar(4000)
set @sql='select @FieldValue='+@FieldName+ ' from '+@TableName+' where '+@IdName+'=@IdValue'
exec sp_executesql @sql,N'@FieldValue varchar(50) out,@IdValue int','@FieldValue out,@IdValue'
END
alter PROCEDURE [dbo].[GetFieldById]
-- Add the parameters for the stored procedure here
@TableName varchar(50),
@IdName varchar(50),
@IdValue int,
@FieldName varchar(50),
@FieldValue varchar(50) out
AS
BEGIN
declare @sql nvarchar(4000)
set @sql='select @FieldValue='+@FieldName+ ' from '+@TableName+' where '+@IdName+'=@IdValue'
exec sp_executesql @sql,N'@FieldValue varchar(50) out,@IdValue int',@FieldValue out,@IdValue
END
-- Add the parameters for the stored procedure here
@TableName varchar(50),
@IdName varchar(50),
@IdValue int,
@FieldName varchar(50),
@FieldValue varchar(50) out
AS
BEGIN
declare @sql nvarchar(4000)
set @sql='select '+@FieldName+ ' from '+@TableName+' where '+@IdName+'='+@IdValue
exec sp_executesql @sql,N'@FieldValue varchar(50) out',@FieldValue out
END
改成这样了,但是执行起来还是有问题,@FieldValue没有数值
然后我用SQL SERVER 2005的执行存储过程来做,结果发现消息
在将 varchar 值 'select FlowType from FlowType where FlowId=' 转换成数据类型 int 时失败。
from decalare @sql varchar(8000)
set @sql=''
set @sql=@sql +'select '+ @FieldValue' + '=' + @FieldName
set @sql=@sql +' from '+ @TableName + ' where ' + @IdName +'=' + @IdValue
exec(@sql) --或者 exec sp_executesql @sql
from后有@TableName ,这个变量没有定义,所以会有提示。