2017-03-23 6 views
0
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 '[email protected]_col+' FROM ' + @Table_Name +' WHERE  @col_condition='+ @id 
    EXECUTE sp_executesql @DynamicSQL 
    set @r=EXECUTE sp_executesql @DynamicSQL 
    RETURN @r 
END 

試験:私は名前を取得するSQL関数を作成必要なときにパスのIDと表名

SELECT Emp_Name FROM Emp WHERE emp_id=1 
+0

とエラーが何ですか? –

+0

'@ sl_col'はどこに宣言されていますか? – LONG

+0

また、 'sp_executesql'を使用している場合、' exec(dynamic sql) 'と' exec sp_executesql(dynamic sql) 'の混在を使用しているように、動的パラメータ部分をクエリ文字列の外に置く必要はありません。 ' – LONG

答えて

0
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 
+0

thanxが動作しない エラー メッセージ137、レベル15、状態2、プロシージャgetName、行15 スカラー変数 "@r"を宣言する必要があります。 –

+0

@ Mohamedal-Hlwany、もう一度チェックしてください、私の悪い私は '@ r'を宣言するのを忘れました – LONG

関連する問題