22,209
社区成员
发帖
与我相关
我的任务
分享
Create FUNCTION GetNameByForeignKey
(
@ForeignKey Varchar(64), --外键键值
@ForeignKeyColumnName Varchar(64), --外键字段名
@ForeignNameColumnName Varchar(64), --外键名称字段名
@ForeignTableName Varchar(64), --外键涉及的表名
@OrderByColumnNames Varchar(128) = '' --排序,多个字段排列用逗号分隔,组成 Order By 的规范
)
RETURNS Varchar(128)
AS
Begin
Declare @ResultValue Varchar(128) = ''
Declare @SQL nvarchar(3250) = ''
Set @SQL = 'Select Top(1) @ResultValue = ' + @ForeignNameColumnName + ' From ' + @ForeignTableName + ' Where ' + @ForeignKeyColumnName + ' = ''' + @ForeignKey + ''''
if ((Not (@OrderByColumnNames is Null)) And (Len(@OrderByColumnNames) > 0))
Begin
Set @SQL = @SQL + ' Order By ' + @OrderByColumnNames
End
--Exec(@SQL)
--创建函数的时候报错了:在函数内对带副作用的运算符 'EXECUTE STRING' 的使用无效
--EXEC sp_executesql @SQL
--创建函数能通过,执行时报错了:只有函数和某些扩展存储过程才能从函数内部执行
EXEC SP_EXECUTESQL @SQL,N'@ResultValue Varchar(128)', @ResultValue OUT;
--创建函数能通过,执行时报错了:只有函数和某些扩展存储过程才能从函数内部执行。
RETURN @ResultValue
End
GO
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[SqlFunction(DataAccess = DataAccessKind.Read)]
public static SqlString GetNameByForeignKey(string ForeignKey, string ForeignKeyColumnName, string ForeignNameColumnName, string ForeignTableName, string OrderByColumnNames)
{
string sql = string.Format(@"Select Top(1) {0} from {1} where {2} = '{3}'", ForeignNameColumnName, ForeignTableName, ForeignKeyColumnName, ForeignKey);
if (!string.IsNullOrEmpty(OrderByColumnNames))
{
sql += " Order By " + OrderByColumnNames;
}
using (SqlConnection cn = new SqlConnection("context connection=true"))
{
cn.Open();
try
{
SqlCommand cmd = new SqlCommand(sql, cn);
object obj= cmd.ExecuteScalar();
return new SqlString(obj.ToString());
}
catch (Exception ex)
{
return null;
}
}
}
}
--创建函数
CREATE FUNCTION GetNameByForeignKey(@ForeignKey NVARCHAR(50),@ForeignKeyColumnName NVARCHAR(50),@ForeignNameColumnName NVARCHAR(50)
,@ForeignTableName NVARCHAR(50),@OrderByColumnNames NVARCHAR(50))
RETURNS NVARCHAR(100)
EXTERNAL NAME database1.UserDefinedFunctions.GetNameByForeignKey
--执行查询
SELECT *,dbo.GetNameByForeignKey(id,'id','qqnum','Group704','') FROM [dbo].[Group704]