在 Management Studio 中设置事务隔离级别从 table 值函数 T-SQL 中消失
Set Transaction Isolation Level Disappears From table-valued function T-SQL In Management Studio
我添加了一个 table 值函数:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
并执行了一个改变函数。但是,当我再次在 Management Studio 中打开上述 TVF 时,上面的行不会出现,因为它已被删除。这是设计使然还是我做错了什么?
这是我试图用上述隔离级别保存的 table 值函数。
USE [playerspace]
GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
/****** Object: UserDefinedFunction [dbo].[udf_get_games_by_date_league_id_group_id] Script Date: 3/21/2015 8:59:32 AM ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER FUNCTION [dbo].[udf_get_games_by_date_league_id_group_id]
(@league_id int, @group_id int,
@division_id int, @tournament_division_id int,
@season_id int, @date1 datetime, @date2 datetime)
RETURNS TABLE
AS
RETURN
WITH events_by_date_CTE (event_type, str_event_address, str_event_title, str_event_description, str_event_location, f_score_set_by, int_game_status, f_home_team_id, f_group_id, f_visitor_team_id, f_season_id, f_league_id, f_member_id, p_event_id, f_division_id, int_visitor_team_score, int_home_team_score, f_zipcode_id, dte_event_start, dte_event_end, gamedaypart, gameday, tme_event_start, f_play_location_id, f_league_schedule_id, f_tournament_division_id, f_play_location_time_slot_id, str_location_name, str_event_address_linked, str_cityname_linked, str_zipcode_linked, str_statecode_linked, str_preferredcityname, str_cityname, str_zipcode, str_statename, str_statecode, visitorgroupurl, str_league_name, str_league_url, str_group_url, int_organization_type, homegroupurl, visitorteamname, hometeamname, str_group_name,int_lon,int_lat,str_division,str_tournament_division,str_season,admin_list,int_timeslot_length_in_minutes,zonename,zoneabbrev,zonegmtoffset,zonedst,zonename_linked,zoneabbrev_linked,zonegmtoffset_linked,zonedst_linked)
AS
-- Define the CTE query.
(
select event_type,str_event_address,str_event_title,str_event_description,str_event_location,f_score_set_by,int_game_status,f_home_team_id,f_group_id,f_visitor_team_id,f_season_id,f_league_id,f_member_id,p_event_id,f_division_id,int_visitor_team_score,int_home_team_score,f_zipcode_id,dte_event_start,dte_event_end,gamedaypart,gameday,tme_event_start,f_play_location_id,f_league_schedule_id,f_tournament_division_id,f_play_location_time_slot_id,str_location_name,str_event_address_linked,str_cityname_linked,str_zipcode_linked,str_statecode_linked,str_preferredcityname,str_cityname,str_zipcode,str_statename,str_statecode,visitorgroupurl,str_league_name,str_league_url,str_group_url,int_organization_type,homegroupurl,visitorteamname,hometeamname,str_group_name,int_lon,int_lat,str_division,str_tournament_division,str_season,admin_list,int_timeslot_length_in_minutes,zonename,zoneabbrev,zonegmtoffset,zonedst,zonename_linked,zoneabbrev_linked,zonegmtoffset_linked,zonedst_linked
from udf_get_events_by_date_group_id_league_id(@league_id,@group_id,@division_id,@tournament_division_id,@season_id,@date1,@date2)
)
(
select * from events_by_date_CTE as games_query
where 1=1
)
GO
很奇怪,但让我们做个测试....
过程定义
CREATE PROCEDURE Test_Procs
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT 'Test_Procs executed'
END
检查过程定义
exec sp_helptext 'Test_Procs'
过程定义
It returns exactly the same definition as above.
本例中的 SET 运算符不是 UDF 的一部分。
您也不能在 UDF 中使用 SET 运算符
https://msdn.microsoft.com/en-us/library/ms191320.aspx
User-defined functions cannot be used to perform actions that modify
the database state.
User-defined functions cannot contain an OUTPUT
INTO clause that has a table as its target.
User-defined functions can
not return multiple result sets. Use a stored procedure if you need to
return multiple result sets.
Error handling is restricted in a
user-defined function.
A UDF does not support TRY…CATCH, @ERROR or
RAISERROR.
User-defined functions cannot call a stored procedure, but
can call an extended stored procedure.
User-defined functions cannot
make use of dynamic SQL or temp tables. Table variables are allowed.
SET statements are not allowed in a user-defined function.
The FOR XML
clause is not allowed
查看项目符号 8。
我添加了一个 table 值函数:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
并执行了一个改变函数。但是,当我再次在 Management Studio 中打开上述 TVF 时,上面的行不会出现,因为它已被删除。这是设计使然还是我做错了什么?
这是我试图用上述隔离级别保存的 table 值函数。
USE [playerspace]
GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
/****** Object: UserDefinedFunction [dbo].[udf_get_games_by_date_league_id_group_id] Script Date: 3/21/2015 8:59:32 AM ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER FUNCTION [dbo].[udf_get_games_by_date_league_id_group_id]
(@league_id int, @group_id int,
@division_id int, @tournament_division_id int,
@season_id int, @date1 datetime, @date2 datetime)
RETURNS TABLE
AS
RETURN
WITH events_by_date_CTE (event_type, str_event_address, str_event_title, str_event_description, str_event_location, f_score_set_by, int_game_status, f_home_team_id, f_group_id, f_visitor_team_id, f_season_id, f_league_id, f_member_id, p_event_id, f_division_id, int_visitor_team_score, int_home_team_score, f_zipcode_id, dte_event_start, dte_event_end, gamedaypart, gameday, tme_event_start, f_play_location_id, f_league_schedule_id, f_tournament_division_id, f_play_location_time_slot_id, str_location_name, str_event_address_linked, str_cityname_linked, str_zipcode_linked, str_statecode_linked, str_preferredcityname, str_cityname, str_zipcode, str_statename, str_statecode, visitorgroupurl, str_league_name, str_league_url, str_group_url, int_organization_type, homegroupurl, visitorteamname, hometeamname, str_group_name,int_lon,int_lat,str_division,str_tournament_division,str_season,admin_list,int_timeslot_length_in_minutes,zonename,zoneabbrev,zonegmtoffset,zonedst,zonename_linked,zoneabbrev_linked,zonegmtoffset_linked,zonedst_linked)
AS
-- Define the CTE query.
(
select event_type,str_event_address,str_event_title,str_event_description,str_event_location,f_score_set_by,int_game_status,f_home_team_id,f_group_id,f_visitor_team_id,f_season_id,f_league_id,f_member_id,p_event_id,f_division_id,int_visitor_team_score,int_home_team_score,f_zipcode_id,dte_event_start,dte_event_end,gamedaypart,gameday,tme_event_start,f_play_location_id,f_league_schedule_id,f_tournament_division_id,f_play_location_time_slot_id,str_location_name,str_event_address_linked,str_cityname_linked,str_zipcode_linked,str_statecode_linked,str_preferredcityname,str_cityname,str_zipcode,str_statename,str_statecode,visitorgroupurl,str_league_name,str_league_url,str_group_url,int_organization_type,homegroupurl,visitorteamname,hometeamname,str_group_name,int_lon,int_lat,str_division,str_tournament_division,str_season,admin_list,int_timeslot_length_in_minutes,zonename,zoneabbrev,zonegmtoffset,zonedst,zonename_linked,zoneabbrev_linked,zonegmtoffset_linked,zonedst_linked
from udf_get_events_by_date_group_id_league_id(@league_id,@group_id,@division_id,@tournament_division_id,@season_id,@date1,@date2)
)
(
select * from events_by_date_CTE as games_query
where 1=1
)
GO
很奇怪,但让我们做个测试....
过程定义
CREATE PROCEDURE Test_Procs
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT 'Test_Procs executed'
END
检查过程定义
exec sp_helptext 'Test_Procs'
过程定义
It returns exactly the same definition as above.
本例中的 SET 运算符不是 UDF 的一部分。 您也不能在 UDF 中使用 SET 运算符
https://msdn.microsoft.com/en-us/library/ms191320.aspx
User-defined functions cannot be used to perform actions that modify the database state.
User-defined functions cannot contain an OUTPUT INTO clause that has a table as its target.
User-defined functions can not return multiple result sets. Use a stored procedure if you need to return multiple result sets.
Error handling is restricted in a user-defined function.
A UDF does not support TRY…CATCH, @ERROR or RAISERROR.
User-defined functions cannot call a stored procedure, but can call an extended stored procedure.
User-defined functions cannot make use of dynamic SQL or temp tables. Table variables are allowed.
SET statements are not allowed in a user-defined function.
The FOR XML clause is not allowed
查看项目符号 8。