环境sql server 2005
在我的存储过程中,我正在调用另一个存储过程将几行插入到几个表中。插入的最后一行我想将该行的标识传递给原始存储过程。我这样做是通过使用return scope_identity();
我的理解return
是仅用于错误消息/状态代码。这是做我需要做的事情的“好”方式,还是有另一种“更好”的方式?
我正在使用 sp_helptext 列出一些存储的过程而不是通过 ui。我对我们选择采用的命名约定有疑问。
我有一个名为 [Test.FooBar] 的存储过程。
Execute sp_helptext [Test.FooBar]
Run Code Online (Sandbox Code Playgroud)
消息 15009,级别 16,状态 1,过程 sp_helptext,第 54 行 对象 'Test.FooBar' 在数据库 'Foo' 中不存在或对于此操作无效。
当我将 exceut 语句更改为完全限定时,我收到一个不同的错误
Execute sp_helptext [Foo].[dbo].[Test.FooBar]
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '.'.
有人可以指出我正确的方向来解决这个问题。非常感谢。
环境sql server 2005 sp3
我有一个以 INT 作为输入的存储过程。我想在调用存储过程期间将 CHAR 转换为 INT。看来我不能那样做。我在@foo 之前收到语法错误。我没有看到它请有人帮我找到它。非常感谢。
CREATE PROCEDURE testme
@test AS INT
AS
BEGIN
SELECT @TEST
END
DECLARE @foo AS CHAR(6)
set @foo = '11test'
EXEC testMe @test = CAST(Substring(@foo,1,2) as int)
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个分区视图为3个表tb_sales2010
,tb_sales2011
,tb_sales2012
使用检查约束(respectivly为每个表)
日期部分(年,[日期])=(2010)
日期部分(年,[日期])=(2011)
日期部分(年,[日期])=(2012)
表 2010 的架构(所有其他表都相同)
CREATE TABLE [dbo].[tb_Sales2010](
[Date] [smalldatetime] NOT NULL,
[ID] [int] NOT NULL
CONSTRAINT [PK_tb_Sales2010] PRIMARY KEY NONCLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tb_Sales2010] WITH CHECK ADD CONSTRAINT [CK_Date_2010] CHECK ((datepart(year,[Date])=(2010)))
GO
Run Code Online (Sandbox Code Playgroud)
我的查询是
SELECT TOP 1 *
FROM partitionedTb_sales
WHERE DATEPART(YY, DATE) = 2011
Run Code Online (Sandbox Code Playgroud)
我的问题是,执行计划表明它正在扫描所有 3 个表。而不是查看检查约束并说表 …