Sql server sql脚本需要if语句包装
我试图将一个简单的函数包装在一个存在性检查中,为什么我会得到错误的语法 更新:Sql server sql脚本需要if语句包装,sql-server,tsql,Sql Server,Tsql,我试图将一个简单的函数包装在一个存在性检查中,为什么我会得到错误的语法 更新: GO IF EXISTS (SELECT TOP 1 * FROM Customers) BEGIN USE [rstestDB] SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE FUNCTION [dbo].[udf_GetName] ( @p
GO
IF EXISTS (SELECT TOP 1 * FROM Customers)
BEGIN
USE [rstestDB]
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE FUNCTION [dbo].[udf_GetName]
(
@p1 nvarchar(25)
)
RETURNS varchar
AS
BEGIN
DECLARE @Result varchar(25)
SELECT @Result = 'John Doe'
RETURN @Result
END
END
GO
获取以下错误:
Msg 156,第15级,状态1,第10行
关键字“FUNCTION”附近的语法不正确。
味精178,第15级,状态1,第19行
具有返回值的RETURN语句不能在此上下文中使用。
GO是sqlcmd和osql实用程序识别的命令,用于向SQL引擎发送命令,它不是有效的SQL
取出所有的GO
s,除了最末端
一个同样会失败的简单示例:
IF 1=1
BEGIN
SELECT 'FOO'
GO
END
您的所有设置实际上都应该在脚本的最开始,因为它们将在整个会话期间保持不变。
GO是sqlcmd和osql实用程序识别的命令,用于向SQL引擎发送命令,它不是有效的SQL
取出所有的GO
s,除了最末端
一个同样会失败的简单示例:
IF 1=1
BEGIN
SELECT 'FOO'
GO
END
您的所有设置实际上都应该在脚本的最开始,因为它们将在整个会话期间保持不变。您正在尝试将
'John Doe'
设置为INT
谢谢,已更新。但它仍然存在一个问题。这和围棋有关吗?如果删除If检查,则开始和结束脚本工作正常。直到我介绍了这张支票exists@rod是的,请看我下面的答案。varchar和nvarchar应该总是有长度参数,例如varchar(30)。否则,它们可能在某些上下文中默认为varchar(1),在其他上下文中默认为varchar(30)。@JohnDewey:它们的默认长度为1-除了在CAST
或CONVERT
中,它们的默认长度为30。您正在尝试将'John Doe'
设置为INT
谢谢,已更新。但它仍然存在一个问题。这和围棋有关吗?如果删除If检查,则开始和结束脚本工作正常。直到我介绍了这张支票exists@rod是的,请看我下面的答案。varchar和nvarchar应该总是有长度参数,例如varchar(30)。否则,它们可能在某些上下文中默认为varchar(1),在其他上下文中默认为varchar(30)。@JohnDewey:它们的默认长度为1-除了在CAST
或CONVERT
中,它们的默认长度为30