Sql server 2008 当传递Id和表名时,我需要创建SQL函数来获取名称
考试:Sql server 2008 当传递Id和表名时,我需要创建SQL函数来获取名称,sql-server-2008,Sql Server 2008,考试: 错误是什么?声明@sl_col的位置在哪里?另外,如果您使用的是sp_executesql,则不需要将动态参数部分放在查询字符串之外,看起来您使用的是exec(动态sql)和exec sp_executesql(动态sql)抱歉,它的col\u nameAFAIK,不能在用户定义的函数中使用动态sql。您可以将函数更改为存储过程,但我建议您重新考虑整个方法。thanx而非work errors Msg 137,级别15,状态2,过程getName,第15行必须声明标量变量“@r”。@Mo
错误是什么?声明
@sl_col
的位置在哪里?另外,如果您使用的是sp_executesql
,则不需要将动态参数部分放在查询字符串之外,看起来您使用的是exec(动态sql)
和exec sp_executesql(动态sql)
抱歉,它的col\u nameAFAIK,不能在用户定义的函数中使用动态sql。您可以将函数更改为存储过程,但我建议您重新考虑整个方法。thanx而非work errors Msg 137,级别15,状态2,过程getName,第15行必须声明标量变量“@r”。@MohamedAL Hlwany,再次检查,我的错,我忘了声明@r
ALTER FUNCTION [dbo].[getName](@Id int,@Table_Name sysname,@col_name nvarchar(30),@col_condition)
RETURNS nvarchar(400)
AS
BEGIN
DECLARE @r nvarchar(250)
DECLARE @DynamicSQL nvarchar(4000)
SET @DynamicSQL = N'SELECT '+@sl_col+' FROM ' + @Table_Name +' WHERE @col_condition='+ @id
EXECUTE sp_executesql @DynamicSQL
set @r=EXECUTE sp_executesql @DynamicSQL
RETURN @r
END
SELECT Emp_Name FROM Emp WHERE emp_id=1
ALTER FUNCTION [dbo].[getName]
(@id int,@Table_Name sysname,@col_name nvarchar(30),@col_condition)
RETURNS nvarchar(400)
AS BEGIN
DELCARE @r varchar(50)
DECLARE @DynamicSQL nvarchar(4000)
SET @DynamicSQL = 'SELECT @r = ' + @col_name + ' FROM ' + @Table_Name + ' WHERE ' + @col_condition + ' = ' + @id
EXECUTE (@DynamicSQL)
RETURN @r
END