日期:2014-05-18 浏览次数:20582 次
USE LzmTWWorks
GO
CREATE PROCEDURE [dbo].[CreateLDateFunction]
@Database nvarchar(50)
,@Namespace nvarchar(50)=N'dbo'
,@FunctionName nvarchar(50)
,@LDateTableNamespace nvarchar(50)=N'dbo'
,@LDateTable nvarchar(50)
AS
BEGIN
DECLARE @SQL nvarchar(MAX)
SELECT @SQL = [LzmTWWorks].[dbo].[GetCreateLdateFunctionStatement] (
@Namespace
,@FunctionName
,@LDateTableNamespace
,@LDateTable)
SET @SQL = N'USE ' + @Database + ' ' + @SQL
PRINT @SQL
EXEC sp_executesql @SQL
END
DECLARE @return_value int
EXEC @return_value = [LzmTWWorks].[dbo].[CreateLDateFunction]
@Database = N'EmployeeWorks',
@FunctionName = N'FunTest',
@LDateTable = N'测试'
SELECT 'Return Value' = @return_value
USE EmployeeWorks
CREATE FUNCTION [dbo].[FunTest]
(
@当前时间 [dbo].[LDate] = N'Current'
)
RETURNS TABLE
AS
RETURN
(
SELECT a.*
FROM [dbo].[测试] a
RIGHT OUTER JOIN
(
SELECT [测试ID]
,MIN(DISTINCT [截止日期])AS 查询时间
FROM [dbo].[测试]
WHERE @当前时间 BETWEEN [起始日期] AND [截止日期]
GROUP BY [测试ID]
) b
ON a.[测试ID]= b.[测试ID] AND a.截止日期 = b.查询时间
)
消息 111,级别 15,状态 1,第 2 行
'CREATE FUNCTION' 必须是查询批次中的第一个语句。
消息 137,级别 15,状态 2,第 17 行
必须声明标量变量 "@当前时间"。
(1 行受影响)
USE Employee GO CREATE FUNCTION ... GO
------解决方案--------------------
USE EmployeeWorks
go
CREATE FUNCTION [dbo].[FunTest]
....
------解决方案--------------------
CREATE FUNCTION [dbo].[FunTest]
(
@当前时间 datetime
)
RETURNS TABLE
AS
RETURN
------解决方案--------------------
USE LzmTWWorks
GO
CREATE PROCEDURE [dbo].[CreateLDateFunction]
@Database nvarchar(50)
,@Namespace nvarchar(50)=N'dbo'
,@FunctionName nvarchar(50)
,@LDateTableNamespace nvarchar(50)=N'dbo'
,@LDateTable nvarchar(50)
AS
BEGIN
DECLARE @SQL nvarchar(MAX)
SELECT @SQL = [LzmTWWorks].[dbo].[GetCreateLdateFunctionStatement] (
@Namespace
,@FunctionName
,@LDateTableNamespace
,@LDateTable)
SET @SQL = N'USE ' + @Database + '
go
' + @SQL
PRINT @SQL
EXEC sp_executesql @SQL
END
------解决方案--------------------
你能否简化一下问题,这个表结构都没有
------解决方案--------------------
我总算看明白你的意思了,没办法,人笨了点
----
exec()里面不能有go
'CREATE FUNCTION' 必须是查询批次中的第一个语句。
exec()结束之后sqlcontext仍然返回调用它的状态
---
所以,总的来说是没有办法
------解决方案--------------------
只要上面三条有一条能够解决掉,这个问题就了结了,估计很玄
------解决方案--------------------
此题无解.
------解决方案--------------------
搞不定
------解决方案--------------------
变通的方法.
每个库下建相应的存储过程执行当前库下CREATE FUNCTION 的操作.